Windows编程实验报告.docx
- 文档编号:12052486
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:15
- 大小:259.07KB
Windows编程实验报告.docx
《Windows编程实验报告.docx》由会员分享,可在线阅读,更多相关《Windows编程实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
Windows编程实验报告
院系:
计算机科学学院
专业:
软件工程
年级:
2012级
课程名称:
WINDOWS程序设计
组员:
王钟铭马明周亮
指导教师:
孙阳光
2015年5月16日
年级
2012级
学号
2012213651
2012213672
2012213684
专业
软件工程
姓名
王钟铭
马明
周亮
实验名称
使用MFC实现GDI绘图
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
一:
实验目的和要求:
目的:
图形设备接口(GDI),把应用程序的函数调用传递给图形设备驱动程序,由相关驱动程序来执行与硬件相关的函数。
GDI向应用程序提供一个设备无关的编程,同时以设备相关的格式和具体的硬件设备交互。
掌握在MFC中使用GDI进行绘图操作。
要求:
用MFC使用GDI进行绘图操作。
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
二:
实验原理和步骤
在MFC使用两类对象:
(1)设备上下文对象
(2)GDI对像。
其中,主要用CClientDC和CPen来实现。
主要有以下三个步骤:
(1)定义数据结构类型和变量
(2)初始化绘图信息(3)绘图过程的实现
三:
核心代码
CDlg2:
:
CDlg2(CWnd*pParent/*=NULL*/)
:
CDialog(CDlg2:
:
IDD,pParent)
{//{{AFX_DATA_INIT(CDlg2)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
}
voidCDlg2:
:
DoDataExchange(CDataExchange*pDX)
{CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlg2)
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CDlg2,CDialog)
//{{AFX_MSG_MAP(CDlg2)
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
////CDlg2messagehandlers
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
voidCDlg2:
:
OnMouseMove(UINTnFlags,CPointpoint)
{//TODO:
Addyourmessagehandlercodehereand/orcalldefault
oldp=point;
CClientDCcdc(this);//定义客户区设备环境
if(nFlags&MK_LBUTTON)
{CPenpen;
pen.CreatePen(PS_SOLID,5,RGB(0,255,0));
cdc.SelectObject(&pen);
cdc.MoveTo(oldp.x,oldp.y);
cdc.LineTo(point.x,point.y);//绘制线段
oldp=point;
}CDialog:
:
OnMouseMove(nFlags,point);
}
四:
实验结果分析
实验结果:
实
验
结
果
分
析
及
心
得
体
会
通过这次的实验,我学会了初步利用WINDOWS提供的图形设备借口GDA将图形显示到显示器上。
本次实验的学习,加深了我对Windows编程中MFC中这两类对象的使用,掌握了新的技能,让我在今后的学习中对Windows中MFC的了解更加深刻。
成
绩
评
定
教师签名:
年月日
年级
2012级
学号
2012213651
2012213672
2012213684
专业
软件工程
姓名
王钟铭
马明
周亮
实验名称
使用MFC实现位图
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
一:
实验目的和要求:
目的:
掌握创建自定义位图控件。
这是允许在每一种按钮状态下呈现不同的位图,这些状态包括:
disabled,normal,mouseover,还有buttonpressed;除了按钮的图像,让我们的按钮饱含文本,并且根据按钮图片控制文本的对齐方式也很重要。
按钮采用XP样式,还包含了我们定制的一些特性。
要求:
使用MFC实现位图。
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
二:
实验原理和步骤
1.在内存条中创建位图对象。
2.根据BITMAP结构在内存条中创建位图对象。
3.创建与指定设备上下文兼容的位图的对象。
4.从应用程序资源中加载位图对象,有两种形式,可以根据资源名或资源ID加载。
三:
核心代码
CDlg3:
:
OnBnClickedButton1()
{
if(number<0)
{
MessageBox("没有上一张了");
number=1;
return;
}
CRectwRect;
this->GetWindowRect(&wRect);
this->ScreenToClient(&wRect);
CClientDCcdc(this);
CDCmdc,TempDC;
BITMAPBmpInfo;
CBitmapClientBmp,*pOldBmp;
mdc.CreateCompatibleDC(&cdc);
TempDC.CreateCompatibleDC(&cdc);
ClientBmp.CreateCompatibleBitmap(&cdc,wRect.right,wRect.bottom);
mdc.SelectObject(&ClientBmp);
TempDC.SelectObject(&bmp[number]);
bmp[number].GetBitmap(&BmpInfo);
mdc.TransparentBlt(0,0,300,300,&TempDC,0,0,BmpInfo.bmWidth,BmpInfo.bmHeight,RGB(0,0,0));
cdc.BitBlt(100,50,300,300,&mdc,0,0,SRCCOPY);
number--;
ClientBmp.DeleteObject();
mdc.DeleteDC();
}
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
voidCDlg3:
:
OnBnClickedButton2()
{
if(number>=4)
{
MessageBox("没有下一张了");
number=2;
return;
}
CRectwRect;
this->GetWindowRect(&wRect);
this->ScreenToClient(&wRect);
CClientDCcdc(this);
CDCmdc,TempDC;
BITMAPBmpInfo;
CBitmapClientBmp,*pOldBmp;
mdc.CreateCompatibleDC(&cdc);
TempDC.CreateCompatibleDC(&cdc);
ClientBmp.CreateCompatibleBitmap(&cdc,wRect.right,wRect.bottom);
mdc.SelectObject(&ClientBmp);
TempDC.SelectObject(&bmp[number]);
bmp[number].GetBitmap(&BmpInfo);
//mdc.BitBlt(0,0,wRect.Width(),wRect.Height(),&TempDC,0,0,SRCCOPY);
mdc.TransparentBlt(0,0,300,300,&TempDC,0,0,BmpInfo.bmWidth,BmpInfo.bmHeight,RGB(0,0,0));
cdc.BitBlt(100,50,300,300,&mdc,0,0,SRCCOPY);
number++;
ClientBmp.DeleteObject();
mdc.DeleteDC();
//TODO:
在此添加控件通知处理程序代码
}
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
四:
运行结果
实验结果:
实
验
结
果
分
析
及
心
得
体
会
位图是储存在计算机内存当中的一个GDI对象,本次的实验让我学会了在BITMAP结构在内存条中创建位图对象,也让我学会了在MFC中位图控件的使用。
让我对计算机中图像的储存方式和绘制有了新的了解,对计算机中MFC的掌握有了更深层次的了解。
在今后的学习中有了更大的帮助。
成
绩
评
定
教师签名:
年月日
年级
2012级
学号
2012213651
2012213672
2012213684
专业
软件工程
姓名
王钟铭
马明
周亮
实验名称
使用单行、多行编辑框输入显示文本
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
一:
实验目的和要求:
1.掌握编辑控件的常用形态、CEdit类常用处理函数以及消息处理。
2.掌握SetTextColor函数的应用。
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
二:
实现流程
(1)设置“password”属性项,即用户输入时,用“*”显示
(2)设置多行文本编辑框,且带水平和垂直滚动条,同时该编辑框为只读的,即不允许用户输入,这时需要为其设置“MultiLine”,“Horizontalscroll”,“Verticalscroll”,“Read-only”
(3)添加EN_CHAGE消息映射和消息响应函数OnChangeUser()
(4)设置按钮的消息响应函数
WINGDIAPICOLORREFWINAPISetTextColor(__inHDChdc,__inCOLORREFcolor);
hdc是当前设备的句柄。
color是设置当前设备字符输出颜色。
voidCTest43BaseEditBoxDlg:
:
OnSet()
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
三:
核心代码
设置“password”属性项,即用户输入时,用“*”显示设置多行文本编辑框,且带水平和垂直滚动条,同时该编辑框为只读的,即不允许用户输入,这时需要为其设置“MultiLine”,“Horizontalscroll”,“Verticalscroll”,“Read-only”
voidCTest43BaseEditBoxDlg:
:
OnChangeUser()
{
//TODO:
如果该控件是RICHEDIT控件,则它将不会
//发送该通知,除非重写CDialog:
:
OnInitDialog()
//函数并调用CRichEditCtrl().SetEventMask(),
//同时将ENM_CHANGE标志“或”运算到掩码中。
//TODO:
在此添加控件通知处理程序代码
UpdateData(true); //获取编辑框值
m_password=m_user;
UpdateData(false); //更新编辑控件内容
}
设置按钮的消息响应函数如下:
voidCTest43BaseEditBoxDlg:
:
OnSet()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true); //获取编辑控件值
if((m_user.IsEmpty())||(m_password.IsEmpty())) //用户名、密码是否为空
{
AfxMessageBox(L"用户名和密码不能为空!
");
return;
}
CStringstr;
str=L"用户名为:
"+m_user+L"密码为:
"+m_password+L"\r\n"; //\r\n实现文件的换行
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_USERLIST); //获取多行编辑控件窗口指针
pEdit->SetSel(0,-1); //选择全部文本
intnStart,nEnd;
pEdit->GetSel(nStart,nEnd);
pEdit->SetSel(nEnd,nEnd); //将插入符定位到最后的一个字符
pEdit->ReplaceSel(str); //插入需要的文本
m_user=m_password=L"";
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
UpdateData(false); //更新显示编辑控件的内容
GetDlgItem(IDC_USER)->SetFocus(); //设置用户名编辑框 输入的焦点
}
四:
运行测试
实
验
结
果
分
析
及
心
得
体
会
通过本次的实验,我学会了Windows编辑控件中的功能的使用、CEdit类常用处理函数的使用,对以后的学习有了很大的帮助。
在以后的学习中,会更加加深这方面的学习,对以后有很大的帮助。
成
绩
评
定
教师签名:
年月日
成
绩
评
定
教师签名:
年月日
年级
2012级
学号
2012213651
2012213672
2012213684
专业
软件工程
姓名
王钟铭
马明
周亮
实验名称
设置编辑框控件的背景、文本颜色
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
一:
实验目的和要求:
1.学习美化控件显示。
2.掌握SetTextColor函数的应用。
3.掌握如何制定各种控件的颜色显示。
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
二:
实现流程
(1)定义颜色、画刷。
在对话框头文件“ColorEditBoxDlg.h”中,定义画刷对象和颜色结构。
在对话框的初始化函数OnInitDialg()中,进行相应的初始化。
(2)重载对话框OnCtrlColor函数,修改控件的绘制属性。
使用ClassWizard为对话框添加WM_CTLCOLOR消息映射和消息响应函数OnCtlColor,实现编辑框的颜色设置。
三:
核心代码
CColorEditBoxDlg:
:
CColorEditBoxDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CColorEditBoxDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CColorEditBoxDlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCColorEditBoxDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CColorEditBoxDlg)
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}
实
验
原
理
(
算
法
流
程
图
或
者
含
注
释
的
源
代
码
)
BOOLCColorEditBoxDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
m_redcolor=RGB(255,0,0);//红色
m_bluecolor=RGB(0,0,255);//蓝色
m_textcolor=RGB(255,255,255);//白色文本
m_redbrush.CreateSolidBrush(m_redcolor);//红色画刷
m_bluebrush.CreateSolidBrush(m_bluecolor);//蓝色画刷
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
实
验
结
果
分
析
及
心
得
体
会
四:
运行测试
五、心得分析
本次的实验,我初步学习了Windows中美化控件的使用,初步学会了SetTextColor函数的应用,对编辑函数的使用。
让我对Windows中编辑控件有了更深刻的了解,对未来的学习有很大的帮助。
绩
评
定
心____________________________________________________________________________________________________________________________教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 编程 实验 报告