mfc实验指导书_第1页
mfc实验指导书_第2页
mfc实验指导书_第3页
mfc实验指导书_第4页
mfc实验指导书_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual C+实验指导书软件学院软技教研室2008-8目 录实验一 Visual C+编程基础实验2实验二 MFC程序的界面设计与资源管理实验7实验三 MFC的消息和命令实验12实验四 设备环境与屏幕绘图实验19实验五 对话框实验24实验六 通用控件实验28实验七 文档与视图结构实验49实验八 数据库编程实验54实验一 Visual C+编程基础实验一、实验目的和要求1、熟悉Visual C编程环境。2、利用应用程序向导生成应用程序框架。3、了解MFC可以生成的应用程序类型。二、实验内容利用应用程序向导建立基于单文档/视图结构的应用程序,查看框架程序中各类的结构。三、实验步骤在Visual

2、 C+ 6.0开发环境中,选择“文件”菜单下的“新建”菜单项,弹出对话框,选择要创建的文件类型,共分为文件、工程、工作区和其它文档四种类型。每种类型又包含许多具体的类型,这里选择“工程”选项卡。“工程”选项卡下列出的是各种不同的工程类型,例如dll类型的动态链接库,exe类型的可执行程序等,这里选择MFC AppWizard(exe),表示要创建的是使用MFC编程的可执行程序,如图1.1所示。在图1.1中的“工程名称”文本框中输入工程名字test,在“位置”文本框中输入工程文件的存放目录,界面右下角的“平台”下拉列表框中的Win32表示新建的工程建立在32位Windows平台上。图1.1 设置

3、工程类型、工程名称和工程存放路径在图1.1所示的界面中,单击“确定”按钮,设置应用程序类型和程序中的资源使用的语言,这里选择应用程序类型为“单文档”,语言为中文,如图1.2所示。图1.2 设置应用程序类型和程序中的资源使用的语言在图1.2所示的界面中,单击“下一步”按钮,设置程序是否支持数据库,这里选择“否”,如图1.3所示。图1.3 设置应用程序是否支持数据库在图1.3所示的界面中,单击“下一步”按钮,设置程序对复合文档的支持,这里选择“不需要”,如图1.4所示。图1.4 设置应用程序是否支持复合文档在图1.4所示的界面中,单击“下一步”按钮,设置程序的其他特性,如程序外观、是否支持Wind

4、ows Sockets等。这里保留默认设置不变,如图1.5所示。图1.5 设置应用程序的外观、是否支持Windows Sockets在图1.5所示的界面中,单击“下一步”按钮,弹出如图1.6所示界面。在图1.6所示的界面中,第一项设置应用程序的界面风格,第二项设置是否为程序自动生成备注,第三项设置使用MFC库的方式是动态连接还是静态连接。使用动态连接方式是在以后生成的应用程序中不包含MFC中的对象代码,这些对象代码只有在应用程序需要的时候才调用;而使用静态连接方式时,则把MFC中的对象代码编译成应用程序的一部分。这里保留默认设置不变。 图1.6 设置界面风格、是否生成备注、DLL的连接方式在图

5、1.6所示的界面中,单击“下一步”按钮,设置应用程序向导自动创建的对象及其相关文件名,如图1.7所示。图1.7 设置应用程序向导自动生成的对象及相关文件名在图1.7所示的界面中,单击“完成”按钮,可以浏览一下应用程序向导调用过程中每个步骤的设置情况,如图1.8所示。图1.8应用程序向导设置情况浏览界面在图1.8所示的界面中,单击“确定”按钮,应用程序向导会根据以上步骤的设置情况生成一个基于MFC的框架程序,如图1.9所示。图1.9 应用程序向导生成的框架程序四、问题讨论1、比较应用程序向导能够生成的三种应用程序之间的异同。2、了解基于文档/视图结构的框架程序中各个类的结构及各自的功能。实验二

6、MFC程序的界面设计与资源管理实验一、实验目的和要求1、熟悉Visual C编程环境。2、掌握常用客户区鼠标消息的用法。3、掌握键盘消息的用法。4、掌握快捷键的用法。二、实验内容编程实现下图2.1所示界面,要求:1)在客户区点击鼠标左键、右键时弹出消息框显示当前鼠标坐标。2)在客户区按下字符键时弹出消息框显示当前按下的字符。利用应用程序向导建立基于单文档/视图结构的应用程序,查看框架程序中各类的结构。图2.1 实验二程序运行界面三、实验步骤1. 新建工程新建一个工程,工程名称为Mouse,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,最终会得到一个框架程序。2

7、. 定义鼠标消息处理函数选择“查看”菜单下的“建立类向导”菜单项,调出如图2.2所示的类向导界面。图2.2 ClassWizard界面由于对客户区鼠标消息的处理封装在视图类中,所以在图2.2所示的界面中,Class name选择CMouseView,Object IDs选择CMouseView,Messages选择WM_LBUTTONDOWN,然后单击Add Function按钮,添加消息WM_LBUTTONDOWN的处理函数,最后单击Edit Code按钮,进入该函数的代码编辑区,如图2.3所示。图2.3 鼠标消息处理函数代码编辑界面在如图2.3所示的鼠标消息处理函数中添加下列代码,捕捉鼠标

8、当前坐标。void CMouseView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default MessageBox(you have pressed the left button,”Mouse”,MB_YESNOCANCEL|MB_ICONWARNING); CView:OnLButtonDown(nFlags, point); 在图2.2所示的界面中,用同样的方法添加消息WM_RBUTTONDOWN的处理函数,在该函数中添加下列代码。

9、void CMouseView:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CString str; /定义字符串变量 str.Format(你按下了鼠标右键,当前x坐标为%d,当前y坐标为%d,point.x,point.y); /格式化字符串 MessageBox(str); /显示字符串 CView:OnRButtonDown(nFlags, point);3. 编译运行程序,测试执行结果程序运行主界面如图2.4所示。图2.4

10、 Mouse工程执行主界面在图2.4空白处即视图类对应的区域单击鼠标左键,弹出如图2.5所示界面,单击鼠标右键,弹出如图2.6所示界面。 图2.5 单击左键弹出的消息框 图2.6 单击右键弹出的消息框4. 定义键盘消息处理函数选择“查看”菜单下的“建立类向导”菜单项,调出如图2.7所示类向导界面。图2.7 ClassWizard界面由于对键盘消息的处理封装在视图类中,所以在图2.7所示的界面中,Class name选择CKeyView,Object IDs选择CKeyView,Messages选择WM_KEYDOWN,然后单击Add Function按钮,添加消息WM_KEYDOWN的处理函数

11、,如图2.8所示。图2.8 键盘消息处理函数代码编辑界面在图2.8所示的键盘消息处理函数中添加下列代码。void CKeyView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call default CString str; str.Format(键盘消息被触发,你按下了%c键,nChar); MessageBox(str); CView:OnKeyDown(nChar, nRepCnt, nFlags); 在图2.7所示的界面中,用同样的

12、方法添加消息WM_CHAR的处理函数,在该函数中添加下列代码。void CKeyView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultif (nChar=a)MessageBox(字符消息被触发,你按下了字符a);if (nChar=s) MessageBox(字符消息被触发,你按下了字符s); if (nChar=d) MessageBox(字符消息被触发,你按下了字符d);CView:OnChar(nChar, nRep

13、Cnt, nFlags);5. 编译运行程序,测试执行结果程序运行主界面如图2.9所示。图2.9 工程Key运行主界面在图2.9所示的界面中,按下字符a,会出现图2.10和图2.11所示的消息框。 图2.10 字符消息处理函数执行界面图 2.11 键盘消息处理函数执行界面四、问题讨论1、CString与char*两种数据类型的异同点。2、MessageBox的用法。3、客户区鼠标消息与非客户区鼠标消息的区别。4、字符消息处理函数的原型。实验三 MFC的消息和命令实验一、实验目的和要求1、掌握菜单与加速键编程方法。2、掌握菜单命令消息和更新命令用户界面消息处理函数的添加方法。3、掌握快捷菜单的调

14、用方法。4、掌握工具栏中按钮的命令消息及更新命令用户界面消息处理函数的添加方法。5、掌握状态栏数组的结构。二、实验内容编程实现下面界面,要求:1)将当前系统时间显示在状态栏的窗格上。2)在视图中单击右键显示上下文菜单。图 实验三要求的程序运行界面三、实验步骤1)将当前系统时间显示在状态栏的窗格上1. 新建工程新建一个工程,工程名称为StatusBar,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,最终得到一个框架程序。2. 修改状态栏数组在项目开发区窗口中,选择ClassView选项卡中的CMainFrame类,在其构造函数CMainFrame()上双击,打开

15、MainFrm.cpp文件,将该文件中状态栏定义数组indicators修改为下列代码。static UINT indicators =ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ID_INDICATOR_TIME /新定义的用来显示时间的窗格;3. 添加字符串资源在项目工作区窗口中,选择ResourceView选项卡中的String Table,在其包含的“字串表”上双击,打开字符串列表,如图3.1所示。图3.1 字符串表编辑器 在图3.1所示的字符串表资源编辑器的空白处双击,定义新的字符串资源I

16、D_INDICATOR_TIME,标题为“00:00:00”,如图3.2所示。图3.2字符串属性对话框4. 添加消息处理函数在项目工作区窗口中,选择“查看”菜单下的“建立类向导”菜单项,调出类向导界面。在类向导界面中,Class name选择CMainFrame,Object IDs选择CMainFrame,Messages选择WM_TIMER,然后单击Add Function按钮,定义时钟消息处理函数,如图3.3所示。图3.3 用类向导添加时钟消息处理函数 在图3.3所示的界面中,单击Edit Code按钮,为时钟消息处理函数添加下列代码。void CMainFrame:OnTimer(UI

17、NT nIDEvent) / TODO: Add your message handler code here and/or call default CTime time=CTime:GetCurrentTime(); /定义时间变量,并初始化为当前系统时间 CString str=time.Format(%H:%M:%S); /将时间变量里面的时分秒格式化出来 m_wndStatusBar.SetPaneText(4,str); /为状态栏第五个窗格设定文字 CFrameWnd:OnTimer(nIDEvent);5. 添加代码,实现功能为框架类CMainFrame的OnCreate函数添

18、加下列代码。int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStruct) = -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAM

19、E) /调用工具栏资源 TRACE0(Failed to create toolbarn); return -1; / fail to create if (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT) /调用状态栏资源 TRACE0(Failed to create status barn); return -1; / fail to create / TODO: Delete these three lines if you don

20、t want the toolbar to / be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); /设定工具栏可以浮动 EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); SetTimer(0,1000,NULL); /为当前程序启动0号时钟 return 0; 该程序执行时,会先调用框架类的CMainFrame的OnCreate()函数,为当前应用程序设置一个时钟,定义的时钟消息处理函数每隔1000毫秒执行一次。时钟消息处理函数每次执行都会得到当前系统时间中的

21、时分秒,将其显示在状态栏的第五个窗格上,如图3.4所示。图3.4 工程StatusBar的执行界面2)在视图中单击右键显示上下文菜单1. 新建工程新建一个工程,工程名称为Menu,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,最终得到如图3.5所示的框架程序界面。图3.5 工程Menu的框架程序界面2. 修改菜单资源在图3.5所示的界面中,选择ResourceView选项卡中的Menu resources下的菜单资源Menu,在主菜单IDR_MAINFRAME上双击,调出菜单资源编辑器。使用菜单资源编辑器为主菜单添加一列新菜单,如图3.6所示。图3.6 菜单资

22、源编辑器界面 在菜单资源编辑器中,选择Hello菜单项,单击右键。在弹出菜单中选择“属性”菜单项,调出如图3.7所示的属性对话框。在属性对话框中修改菜单项的ID号和标题文字,其中标题文字中 “t”后面的内容“Ctrl+T”表示该菜单项对应的加速键为Ctrl+T。图3.7 菜单项属性对话框界面 在如图3.5所示的界面中,选择菜单资源Menu,单击右键。在弹出菜单中选择“插入Menu”菜单项,为当前工程插入新菜单IDR_MENU1,如图3.8所示。图3.8 插入新菜单资源IDR_MENU13. 定义菜单项的命令消息处理函数在如图3.5所示的界面中,选择菜单项Hello,单击右键。在弹出菜单中选择“

23、建立类向导”菜单项,调出类向导界面。在类向导界面中,Class name:选择CMenuView,Object IDs选择ID_TEST,Messages选择COMMAND,如图3.9所示。图3.9 类向导界面在如图3.9所示的界面中,单击Add Function按钮,为菜单项ID_TEST定义其命令消息处理函数OnTest(),然后单击Edit Code按钮为该函数添加下列代码。void CMenuView:OnTest() / TODO: Add your command handler code here MessageBox(测试菜单); /弹出消息框4. 定义消息WM_CONTEXT

24、MENU的处理函数选择“查看”菜单下的“建立类向导”菜单项,调出如图3.10所示的类向导界面。在类向导界面中,Class name选择CMenuView,Object IDs选择CMenuView,Messages选择WM_CONTEXTMENU,然后单击Add Function按钮,定义该消息的处理函数。图3.10 MFC ClassWizard界面在图3.10所示的界面中,单击Edit Code按钮,在消息WM_CONTEXTMENU的处理函数中添加下列代码,显示上下文菜单IDR_MENU1。void CMenuView:OnContextMenu(CWnd* pWnd, CPoint p

25、oint) / TODO: Add your message handler code here CMenu menu; /定义菜单对象 menu.LoadMenu(IDR_MENU1); /调用菜单资源 CMenu *popmenu=menu.GetSubMenu(0); /得到第一列菜单指针 popmenu-TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this); /显示第一列菜单四、问题讨论1、讨论菜单类CMenu中常用成员函数的使用方法。2、讨论快捷菜单的使用方法。3、讨论更新命令用户界面消息处理函数的实现机制。实验四 设备环境与屏幕绘

26、图实验一、实验目的和要求1、掌握CPoint、CRect的用法。2、掌握CDC中常用成员函数的用法。3、掌握画笔、画刷的用法。二、实验内容设计下图所示界面,要求:1)程序运行时,在视图上画椭圆。2)测试各种画刷。图 实验四要求的程序运行界面三、实验步骤1. 新建工程新建一个工程,工程名称为Brush,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,其他设置采用默认值,最终得到一个基于单文档/视图结构的框架程序。2. 添加位图资源在项目工作区窗口中,选择ResouceView中的Brush resources,单击右键。在弹出菜单中选择“插入”菜单项,为当前工程插

27、入新的位图资源,如图4.1所示。图4.1 插入新位图资源3. 添加代码,实现功能在项目工作区窗口中,选择ClassView选项卡中的CBrushView类,在其包含的OnDraw函数上双击,调用该函数,如图4.2所示。图4.2 OnDraw函数编辑界面在void CBrushView:OnDraw(CDC* pDC)函数中添加下面的代码,绘制图形。下面绘图代码实现的功能是在当前客户区中绘图,用来测试画刷。理解下面代码需要参照图4.3,图4.3中最外层的点划线矩形框对应程序的客户区,其余9个rect对应的矩形框中将会显示9个椭圆,这9个小矩形框的高度和宽度都是客户区高度和宽度的1/3。第4章中介

28、绍的CRect类,就是用来定义矩形域的,它由矩形域的左上角坐标和右下角坐标来描述,即CRect rect(left,top,right,bottom)。rect1rect2rect3rect4rect5rect6rect7rect8rect9图4.3 客户区示意图void CBrushView:OnDraw(CDC* pDC)CBrushDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCRect rect; /定义矩形域GetClientRect(&rect); /得到

29、当前客户区的大小CRect rect1(rect.left,rect.top,rect.right/3,rect.bottom/3);/定义rect1矩形域CBrush newbrush1,*oldbrush1; /定义画刷newbrush1.CreateSolidBrush(RGB(255,0,0); /生成红色实体画刷oldbrush1=pDC-SelectObject(&newbrush1); /将红色画刷掉入当前绘图环境pDC-Ellipse(rect1); /在rect1区域绘制椭圆pDC-SelectObject(oldbrush1); /恢复老的画刷CRect rect2(rec

30、t.Width()/3,rect.top,rect.Width()*2/3,rect.Height()/3); /定义rect2矩形域CBrush newbrush2,*oldbrush2; /定义画刷newbrush2.CreateSolidBrush(RGB(0,255,0); /生成绿色实体画刷oldbrush2=pDC-SelectObject(&newbrush2); /将绿色画刷调入当前绘图环境pDC-Ellipse(rect2); /在rect2区域绘制椭圆pDC-SelectObject(oldbrush2); /恢复老的画刷CRect rect3(rect.Width()*2

31、/3,rect.top,rect.right,rect.Height()/3);/定义rect3矩形域CBrush newbrush3,*oldbrush3; /定义画刷newbrush3.CreateSolidBrush(RGB(0,0,255); /生成蓝色实体画刷oldbrush3=pDC-SelectObject(&newbrush3); /将蓝色画刷调入当前绘图环境pDC-Ellipse(rect3); /在rect3区域绘制椭圆pDC-SelectObject(oldbrush3); /恢复老的画刷CRect rect4(rect.left,rect.Height()/3,rect

32、.right/3,rect.bottom*2/3);/定义rect4矩形域CBrush newbrush4,*oldbrush4; /定义画刷newbrush4.CreateHatchBrush(1,RGB(255,0,0);/定义红色阴影画刷,填充图案为垂直线oldbrush4=pDC-SelectObject(&newbrush4); /将红色阴影画刷调入当前绘图环境pDC-Ellipse(rect4); /在rect4区域绘制椭圆pDC-SelectObject(oldbrush4); /恢复老的画刷CRect rect5(rect.Width()/3,rect.Height()/3,r

33、ect.Width()*2/3,rect.Height()*2/3); /定义rect5矩形域CBrush newbrush5,*oldbrush5; /定义画刷newbrush5.CreateHatchBrush(2,RGB(0,255,0);/生成绿色阴影画刷,填充图案为下斜线oldbrush5=pDC-SelectObject(&newbrush5); /将绿色阴影画刷调入当前绘图环境pDC-Ellipse(rect5); /在rect5区域绘制椭圆pDC-SelectObject(oldbrush5); /恢复老的画刷CRect rect6(rect.Width()*2/3,rect.

34、Height()/3,rect.right,rect.Height()*2/3); /定义rect6矩形域CBrush newbrush6,*oldbrush6; /定义画刷newbrush6.CreateHatchBrush(3,RGB(0,0,255);/生成蓝色阴影画刷,填充图案为上斜线oldbrush6=pDC-SelectObject(&newbrush6); /将蓝色阴影画刷调入当前绘图环境pDC-Ellipse(rect6); /在rect6区域绘制椭圆pDC-SelectObject(oldbrush6); /恢复老的画刷CRect rect7(rect.left,rect.H

35、eight()*2/3,rect.Width()/3,rect.bottom);/定义rect7矩形域CBrush newbrush7,*oldbrush7; /定义画刷newbrush7.CreateHatchBrush(4,RGB(255,0,0);/生成红色阴影画刷,填充图案为交叉线oldbrush7=pDC-SelectObject(&newbrush7); /将红色阴影画刷调入当前绘图环境pDC-Ellipse(rect7); /在rect7区域绘制椭圆pDC-SelectObject(oldbrush7); /恢复老的画刷CRect rect8(rect.Width()/3,rec

36、t.Height()*2/3,rect.Width()*2/3,rect.bottom); /定义rect8矩形域CBrush newbrush8,*oldbrush8; /定义画刷CPen newpen1,*oldpen1; /定义画笔newbrush8.CreateHatchBrush(5,RGB(0,255,0);/生成蓝色阴影画刷,填充图案为交叉线newpen1.CreatePen(PS_SOLID,2,RGB(0,0,255);/生成蓝色实线画笔,线宽为2oldbrush8=pDC-SelectObject(&newbrush8); /将蓝色阴影画刷调入当前绘图环境oldpen1=p

37、DC-SelectObject(&newpen1); /将蓝色画笔调入当前绘图环境pDC-Ellipse(rect8); /在rect8区域绘制椭圆pDC-SelectObject(oldpen1); /恢复老的画笔pDC-SelectObject(oldbrush8); /恢复老的画刷CRect rect9(rect.Width()*2/3,rect.Height()*2/3,rect.right,rect.bottom);/定义rect9矩形域CBrush newbrush9,*oldbrush9; /定义画刷CBitmap bitmap; /定义位图CPen newpen2,*oldpe

38、n2; /定义画笔bitmap.LoadBitmap(IDB_BITMAP1); /调用位图资源newbrush9.CreatePatternBrush(&bitmap); /生成图案画刷,填充图案是位图newpen2.CreatePen(PS_SOLID,2,RGB(255,0,0);/生成实线红色画笔,线宽为2oldbrush9=pDC-SelectObject(&newbrush9); /将图案画刷调入当前绘图环境oldpen2=pDC-SelectObject(&newpen2); /将红色画笔调入当前绘图环境pDC-Ellipse(rect9); /在rect9区域绘制椭圆pDC-S

39、electObject(oldpen2); /恢复老的画笔pDC-SelectObject(oldbrush9); /恢复老的画刷四、分析与讨论1、讨论Windows环境下的绘图操作的基本步骤。2、分析CClientDC和CWindowDC的异同。3、分析图形设备对象的一般使用步骤。实验五 对话框实验一、实验目的和要求1、掌握模态对话框的调用方法。2、掌握字体对话框和颜色对话框的使用方法。二、实验内容设计下图所示界面,要求;1)程序运行时在视图中显示字符串。2)点击子菜单“文件对话框”时,将显示文件对话框。3)点击子菜单“字体对话框”时,调用字体对话框为视图中显示的文字设置字体。4)点击子菜单

40、“颜色对话框”时,调用颜色对话框为视图中显示的文字设置颜色。图 实验五要求的程序运行界面三、实验步骤1. 新建工程新建一个工程,工程名称为CommonDialog,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,其他设置采用默认值,最终得到一个基于单文档/视图结构的框架程序。2. 添加菜单资源在项目工作区窗口中,选择ResourceView选项卡中的菜单资源Menu,在其包含的主菜单IDR_MAINFRAME上双击,打开菜单资源编辑器。利用菜单资源编辑器为主菜单IDR_MAINFRAME添加一列“通用对话框”菜单,它包含三个菜单项,ID号分别为ID_FONT、I

41、D_COLOR和ID_FILE,标题分别为“字体对话框”、“颜色对话框”和 “文件对话框”,如图5.1所示。图5.1 添加“通用对话框”菜单3. 定义变量在项目工作区窗口中,选择ClassView选项卡中的视图类CCommonDialogView,单击右键。在弹出菜单中选择Add Member Variable菜单项,为CCommonDialogView类添加变量m_font和m_color,变量类型分别为LOGFONT和COLORREF。4. 为视图类CCommonDialogView的以下成员函数添加代码CCommonDialogView:CCommonDialogView() / TOD

42、O: add construction code here m_color=RGB(255,0,0); /初始化颜色变量 memset(&m_font, 0, sizeof(m_font); /将m_font所在内存空间清零 m_font.lfWeight = 50; /设置字体宽度为50 m_font.lfHeight = 50; /设置字体高度为50 strcpy(m_font.lfFaceName, 黑体); /设置字体名称void CCommonDialogView:OnDraw(CDC* pDC) CCommonDialogDoc* pDoc = GetDocument(); ASS

43、ERT_VALID(pDoc); / TODO: add draw code for native data hereCString str=欢迎使用Visual C+6.0; /定义字符串变量,并赋初值CRect rect; /定义矩形域GetClientRect(rect); /得到当前客户区的大小,存入rectCFont newfont,*oldfont; /定义字体变量newfont.CreateFontIndirect(&m_font); /生成新字体oldfont=pDC-SelectObject(&newfont); /将新字体选入当前绘图环境pDC-SetBkColor(RGB

44、(128,128,128); /设定文字背景色pDC-SetTextColor(m_color); /设定文本颜色pDC-TextOut(rect.right/3,rect.bottom/2,str); /输出文字pDC-SelectObject(oldfont); /恢复老的字体5. 定义菜单的命令消息处理函数,调用通用对话框在图5.1所示的界面中,选择菜单项“字体对话框”,单击右键。在弹出菜单中选择“建立类向导”菜单项,调出类向导界面。在弹出的类向导界面中,Class name选择CCommonDialogView,Object IDs选择ID_FONT,Messages选择COMMAND

45、,然后单击Add Function按钮,定义菜单项“字体对话框”的命令消息处理函数OnFont(),并在该函数中添加下列代码。void CCommonDialogView:OnFont() / TODO: Add your command handler code here CFontDialog font; /定义字体对话框类型的变量 int i=font.DoModal(); /调用字体对话框,得到函数返回值 if (i=IDOK) /如果选了OK按钮 font.GetCurrentFont(&m_font); /得到选中的字体信息,存入m_font变量 Invalidate(); /使窗

46、口重画 重复第5步的操作,定义菜单项“颜色对话框”和“文件对话框”的命令消息处理函数,添加下列代码,调用颜色对话框和文件对话框。void CCommonDialogView:OnColor() / TODO: Add your command handler code here CColorDialog color; /定义颜色对话框类型的变量 int i=color.DoModal(); /调用颜色对话框 if (i=IDOK) /如果点击了OK按钮 m_color=color.GetColor(); /得到选中的颜色信息,存入m_color变量 Invalidate(); /使窗口重画 v

47、oid CCommonDialogView:OnFile() / TODO: Add your command handler code here CString filter,str; /定义字符串变量 filter=Worksheet Files (*.xls)|*.xls |All Files (*.*)|*.*|; /定义过滤字符串 CFileDialog file(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT,filter,NULL); /定义字体对话框 int i=file.DoModal(); /调用字体对话框if (i=IDOK) /如果选择OK按钮 s

48、tr=file.GetFileName(); /得到选中的文件名 MessageBox(str); /显示文件名 四、分析与讨论1、分析模态对话框和非模态对话框的异同。2、总结属性对话框的实现方法。3、分析通用对话框的一般使用步骤。实验六 通用控件实验一、实验目的和要求1、掌握按钮控件的用法。2、掌握编辑框、组合框、列表框控件的用法。3、掌握滚动条、滑动条、进度条、旋转按钮控件的用法。二、实验内容要求:1)测试按钮用法。2)测试编辑框用法。3)测试滚动条用法。4)测试滚动条用法。三、实验步骤1)测试按钮控件。1. 新建工程新建一个工程,工程名称为Button,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,其他设置采用默认值,最终得到一个基于单文档/视图结构的框架程序。2. 添加新对话

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论