windows程序设计08352.docx
《windows程序设计08352.docx》由会员分享,可在线阅读,更多相关《windows程序设计08352.docx(12页珍藏版)》请在冰豆网上搜索。
windows程序设计08352
实验一:
实验题目:
MFC的图形程序编程
实验目的:
1、掌握如何创建MFC单文档的应用程序
2、掌握如何使用画笔类和画刷类在OnDraw()函数中进行绘图
3、掌握利用设备描述表绘图的方法。
实验内容:
1、在视图类窗口中的OnDraw成员函数中实现绘图功能:
(1)画点
(2)画直线
(3)画矩形
(4)画椭圆
在绘图时,要求利用CPen创建不同样式的画笔;利用CBrush创建不同样式的画刷;利用设备描述表类的FillRect画矩形,并填充颜色。
2、要求在鼠标左键抬起的消息响应函数中使用至少两种方法(使用不同的设备描述表类)来完成上述绘图功能。
实验步骤:
1)在集成开发平台,打开File菜单,单击New菜单项。
2)在New对话框中,选择Projects标签,进行以下操作:
项目类型选择MFCAppWizard[exe];项目名称aa4(任意);设置项目保存位置;确定;工程类型选择“Singledocument”完成即可。
3)打开窗口左边的项目工作区内aa4Classes前面的+号,打开下面列出的Caa4View前面的加号,双击下面列出的OnDraw()函数,就可以在右边的编辑区工作了。
4)在View菜单的ClassWizard菜单项添加鼠标消息,即为View类添加WM_LBUTTONUP消息,在所添加的消息中就可以工作了。
5)编译运行
参考代码:
1、
voidCEx02View:
:
OnDraw(CDC*pDC)
{
CEx02Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CPenpen(PS_SOLID,1,RGB(255,0,0));
CBrushbrush(RGB(0,255,0));
CPen*oldpen=pDC->SelectObject(&pen);
CBrush*oldbrush=pDC->SelectObject(&brush);
pDC->SetPixel(100,100,RGB(0,0,255));
pDC->MoveTo(300,300);
pDC->LineTo(400,400);
pDC->Rectangle(CRect(CPoint(100,100),CPoint(300,300)));
pDC->Ellipse(300,300,500,500);
pDC->SelectObject(oldbrush);
pDC->SelectObject(oldpen);
//TODO:
adddrawcodefornativedatahere
}
改变代码中的画笔、画刷样式!
2、
方法1:
使用CDC类
voidCEx02View:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CDC*pDC=GetDC();
CPenpen(PS_SOLID,1,RGB(255,0,0));
CBrushbrush(RGB(0,255,0));
CPen*oldpen=pDC->SelectObject(&pen);
CBrush*oldbrush=pDC->SelectObject(&brush);
pDC->SetPixel(100,100,RGB(0,0,255));
pDC->MoveTo(300,300);
pDC->LineTo(400,400);
pDC->Rectangle(CRect(CPoint(100,100),CPoint(300,300)));
pDC->Ellipse(300,300,500,500);
pDC->SelectObject(oldbrush);
pDC->SelectObject(oldpen);
ReleaseDC(pDC);
CView:
:
OnLButtonUp(nFlags,point);
}
方法2:
voidCEx02View:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
CPenpen(PS_SOLID,1,RGB(255,0,0));
CBrushbrush(RGB(0,255,0));
CPen*oldpen=dc.SelectObject(&pen);
CBrush*oldbrush=dc.SelectObject(&brush);
dc.SetPixel(100,100,RGB(0,0,255));
dc.MoveTo(300,300);
dc.LineTo(400,400);
dc.Rectangle(CRect(CPoint(100,100),CPoint(300,300)));
dc.Ellipse(300,300,500,500);
dc.SelectObject(oldbrush);
dc.SelectObject(oldpen);
CView:
:
OnLButtonUp(nFlags,point);
}
实验二:
实验题目:
MFC的键盘、鼠标程序编程
实验目的:
1)掌握添加鼠标移动消息的方法
2)掌握如何在构造函数中初始化,在头文件中定义变量
实验内容及参考代码:
1、鼠标程序编程
编写使用鼠标实现橡皮筋功能的画线程序
要求:
使用设备描述表类的设置绘图模式函数,将绘图模式设置成R2_XORPEN 模式,并结合鼠标响应函数来实现橡皮筋功能的画线程序。
代码实现:
(1)在CEx03View中定义下面成员:
private:
CPointm_pOrg,m_pEnd;
(2)添加相关鼠标消息响应函数,并编码如下:
voidCEx03View:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
dc.MoveTo(m_pOrg);
dc.LineTo(m_pEnd);
CView:
:
OnLButtonUp(nFlags,point);
}
voidCEx03View:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
if(nFlags&MK_LBUTTON)
{
CClientDCdc(this);
CPenpen(PS_DOT,1,RGB(0,0,0));
dc.SetROP2(R2_XORPEN);
CPen*oldpen=dc.SelectObject(&pen);
dc.MoveTo(m_pOrg);
dc.LineTo(point);
dc.MoveTo(m_pOrg);
dc.LineTo(m_pEnd);
m_pEnd=point;
dc.SelectObject(oldpen);
}
CView:
:
OnMouseMove(nFlags,point);
}
2、键盘程序编程
要求:
利用WM_KEYDOWN、WM_KEYUP及WM_CHAR消息响应函数来编写键盘程序,掌握键盘消息、响应顺序及对应的消息响应函数参数。
代码如下:
(1)在CEx05View中定义成员变量:
private:
CStringstrdown,strup,strchar;
(2)响应函数:
voidCEx05View:
:
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
strdown.Format("%c,%d",nChar,nChar);
InvalidateRect(NULL,TRUE);
CView:
:
OnKeyDown(nChar,nRepCnt,nFlags);
}
voidCEx05View:
:
OnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
strup.Format("%c,%d",nChar,nChar);
InvalidateRect(NULL,TRUE);
CView:
:
OnKeyUp(nChar,nRepCnt,nFlags);
}
voidCEx05View:
:
OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
//MessageBox("char");
CClientDCdc(this);
strchar.Format("%c,%d",nChar,nChar);
InvalidateRect(NULL,TRUE);
CView:
:
OnChar(nChar,nRepCnt,nFlags);
}
voidCEx05View:
:
OnDraw(CDC*pDC)
{
CEx05Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(80,10,strdown);
pDC->TextOut(80,80,strup);
pDC->TextOut(80,160,strchar);
//TODO:
adddrawcodefornativedatahere
}
实验三:
实验题目:
MFC的文件处理程序编程
实验目的:
1)了解通过文档类的虚函数Serialize()函数来进行文档数据的保存和读取
2)掌握执行ar.IsStoring()分支,操作运算符“<<”和“>>”能保存或读取数据
实验内容:
在单文档的应用程序中利用菜单弹出一个对话框,在对话框的两个编辑框中输入文本,按ok键后,所输入的文本就会显示在窗体中;并可以使文本实现保存和打开。
实验步骤:
1)在集成开发平台,打开File菜单,单击New菜单项。
2)在New对话框中,选择Projects标签,进行以下操作:
项目类型选择MFCAppWizard[exe];项目名称aa11(任意);设置项目保存位置;确定;工程类型选择“Singledocument”完成即可。
3)Insert菜单的Resource命令,添加对话框;在对话框的任何一个空白域双击,弹出一个提示添加新类的对话框,选择“Createanewclass”,创建一个名为CDlg1的类。
1)对话框中添加两个编辑框用以输入文本,为编辑框添加CDlg1类的成员变量m_e1和m_e2。
2)添加菜单AAA,设置其ID为ID_AAA,并为其添加消息。
3)为文档类添加两个成员变量m_Var1Edit和m_Var2Edit,并在构造函数中初始化。
4)在View.cpp中添加头文件#include.
在相应的函数中添加代码。
5)编译运行。
参考代码:
voidCWenjianView:
:
OnAaa()
{
//TODO:
Addyourcommandhandlercodehere
CWenjianDoc*pDoc=GetDocument();
CDlg1dlg1;
if(dlg1.DoModal()==IDOK)
{pDoc->m_Var1Edit=dlg1.m_e1;
pDoc->m_Var2Edit=dlg1.m_e2;
pDoc->UpdateAllViews(NULL);//更新视图
}
}
voidCWenjianView:
:
OnDraw(CDC*pDC)
{
CWenjianDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
pDC->TextOut(100,100,pDoc->m_Var1Edit);
pDC->TextOut(100,120,pDoc->m_Var2Edit);;
}
voidCWenjianDoc:
:
Serialize(CArchive&ar)
{
if(ar.IsStoring())
{
ar<}
else
{
ar>>m_Var1Edit>>m_Var2Edit;
}
UpdateAllViews(NULL);//更新视图
}
CAa1Doc:
:
CAa1Doc()
{
//TODO:
addone-timeconstructioncodehere
m_Var1Edit="AAAA";
m_Var2Edit="BBBB";
}
实验四:
实验题目:
MFC的对话框程序编程
实验目的:
1)了解模态对话框和非模态对话框的含义
2)掌握在单文档的应用程序中创建模态和非模态对话框的方法
实验内容:
1)在单文档的应用程序中添加模态对话框,且新建类;在菜单中调用所建的对话框,并在对话框中实现简单的整数加法。
2)单文档的应用程序中添加非模态对话框,且新建类;在菜单中调用所建的对话框。
实验步骤:
//实验内容1)
1)在集成开发平台,打开File菜单,单击New菜单项。
2)在New对话框中,选择Projects标签,进行以下操作:
项目类型选择MFCAppWizard[exe];项目名称aa9(任意);设置项目保存位置;确定;工程类型选择“Singledocument”完成即可。
1)择Insert菜单Resource命令,添加对话框;并在对话框上添加三个编辑框和一个按钮,右击编辑框选择“ClassWizard”,在“MemberVariables”页面中为三个编辑框添加三个整型的成员变量。
2)在对话框的任何一个空白域双击,弹出一个提示添加新类的对话框,选择“Createanewclass”,创建一个名为Cdlg的类
1)选择工作区中的ResourceView选项卡,可以看到菜单资源,添加一个菜单“对话框”和一个菜单项“模态加”,并为其设置ID为ID_ADD。
2)在View.cpp中添加头文件“dlg.h”,为菜单项“模态加”和对话框中的按钮添加消息,就可以在所添加的消息中添加代码了。
7)编译运行
//实验内容2)
1)在集成开发平台,打开File菜单,单击New菜单项。
2)在New对话框中,选择Projects标签,进行以下操作:
项目类型选择MFCAppWizard[exe];项目名称aa5(任意);设置项目保存位置;确定;工程类型选择“Singledocument”完成即可。
3)Insert菜单Resource命令,添加对话框。
4)在对话框的任何一个空白域双击,弹出一个提示添加新类的对话框,选择“Createanewclass”,创建一个名为Cdlg2的类
5)择工作区中的ResourceView选项卡,可以看到菜单资源,添加一个菜单“对话框”和一个菜单项“非模态”,并为其设置ID。
6)在View.cpp中添加头文件“dlg2.h”,为菜单项“非模态”添加消息,就可以在所添加的消息中添加代码了。
7)编译运行
参考代码:
//模态对话框
voidCA24View:
:
OnAaaBbb()
{
//TODO:
Addyourcommandhandlercodehere
CDlg1dlg1;
dlg1.DoModal();
}
voidCdlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);//从编辑框输入变量
m_x3=m_x1+m_x2;
UpdateData(false);//从变量输出到编辑框显示
}
//非模态对话框
voidCA3View:
:
OnFei()
{
//TODO:
Addyourcommandhandlercodehere
Cdd*m_pModelless;
m_pModelless=newCdd();//动态创建对话框
m_pModelless->Create(IDD_DIALOG1,this);
m_pModelless->ShowWindow(SW_SHOW);//显示对话框
}