C++课程设计MFC.ppt
C+课程设计课程设计内容及要求内容及要求1主要内容主要内容1.1.课程设计基本要求课程设计基本要求2.2.Windows Windows 编程基础编程基础3.3.什么是什么是C+C+的的MFCMFC4.4.什么是什么是MFCMFC编程编程5.5.MFCMFC应用程序的开发流程应用程序的开发流程6.单文档【ClassView】面板7.7.登录对话框与单文档视图联接登录对话框与单文档视图联接8.8.单文档中菜单项与对话框联接单文档中菜单项与对话框联接9.9.实例介绍实例介绍2一、课程设计基本要求一、课程设计基本要求自学自学MFC(2MFC(2学时学时)知识扩充知识扩充C+C+:了解并掌握:了解并掌握MFCMFC程序结构、消息映射机制、程序结构、消息映射机制、MFCMFC类库类库中的常用类(对话框、各种常用控件)。中的常用类(对话框、各种常用控件)。软件开发的基本知识软件开发的基本知识结合设计任务清楚软件开发的基本流程、各个阶段的目标和主结合设计任务清楚软件开发的基本流程、各个阶段的目标和主要工作。要工作。上机调试程序(上机调试程序(3030学时)学时)其他(其他(1414学时)学时)程序调试的基本方法和论文撰写要求(程序调试的基本方法和论文撰写要求(2 2学时)学时)掌握调试程序的方法与技巧。掌握调试程序的方法与技巧。清楚论文组织结构、格式编排等相关知识清楚论文组织结构、格式编排等相关知识学生资料查阅与自主学习(学生资料查阅与自主学习(2 2学时)学时)代码编写(代码编写(1010学时)学时)3二、二、Windows 编程基础编程基础Windows Windows 编程编程就是基于就是基于Windows Windows 的应用程序。的应用程序。2 2种重要的种重要的WindowsWindows应用程序应用程序基于基于对话框对话框的应用程序的应用程序基于基于文档文档/视图视图结构的应用程序结构的应用程序主要特点主要特点具有标准的图形用户界面具有标准的图形用户界面具有与硬件无关的特性具有与硬件无关的特性采用采用“消息传递,事件驱动消息传递,事件驱动”的运行机制,即根据的运行机制,即根据WindowsWindows发送的消息来处理用户的输入发送的消息来处理用户的输入编写编写WindowsWindows应用程序的主要方法(应用程序的主要方法(2 2种)种)使用使用WindowsWindows提供的应用程序提供的应用程序接口(接口(APIAPI)函数)函数使用使用MicrosoftMicrosoft提供的微软提供的微软基础类基础类(MFC)(MFC)4三、什么是三、什么是C+的的MFCMFC(Microsoft Foundation Class LibraryMFC(Microsoft Foundation Class Library,基础类库,基础类库)是微软提供的用来编写是微软提供的用来编写WindowsWindows应用程序的应用程序的C+C+类库类库;封装了封装了APIAPI(WindowsWindows的接口函数)的接口函数),是是Win APIWin API与与C+C+的结合。的结合。MFCMFC大约有大约有200200多个类,封装了多个类,封装了WindowsWindows的大部分编程对象以及的大部分编程对象以及与它们有关的操作。即它由几百个执行文件和源代码文件组成。与它们有关的操作。即它由几百个执行文件和源代码文件组成。注意注意C+C+和和VC+VC+的区别的区别C+C+是是一种程序设计语言一种程序设计语言,是一种大家都承认的软件编制的通用规是一种大家都承认的软件编制的通用规范,即范,即C+C+是一套语法规则的名字,类似汉语,英语。是一套语法规则的名字,类似汉语,英语。VC+VC+是一个软件是一个软件IDEIDE(编译、编辑、调试编译、编辑、调试 )集成开发环境)集成开发环境 MFC MFC是一个非外挂式的是一个非外挂式的软件包软件包,类库类库,MFC,MFC类是微软为类是微软为VC+VC+专配专配的。的。5四、什么是四、什么是MFC编程编程MFCMFC编程编程指的就是使用指的就是使用VC+VC+进行开发,并且是在使用进行开发,并且是在使用VC+VC+提提供的各种向导的情况下的供的各种向导的情况下的MFCMFC编程。编程。在在VC+VC+中可以创建中可以创建3 3类类典型的典型的WindowsWindows应用程序应用程序基于对话框的应用程序基于对话框的应用程序单文档界面(单文档界面(SDISDI)应用程序)应用程序多文档界面(多文档界面(MDIMDI)应用程序)应用程序文档文档/视图视图u文档对象:文档对象:u用来保存数据。用来保存数据。u视图对象:视图对象:u用来显示和编辑数用来显示和编辑数据。据。6五、五、MFC应用程序的开发流程应用程序的开发流程应用程序编程的基本步骤:应用程序编程的基本步骤:(1 1)根据应用程序的特性在)根据应用程序的特性在MFC AppWizardexeMFC AppWizardexe应用应用程序中程序中选择合适的应用程序框架选择合适的应用程序框架。(2 2)利用)利用资源编辑器编辑资源资源编辑器编辑资源,如菜单等。,如菜单等。(3 3)利用类向导()利用类向导(ClassWizardClassWizard)或手工)或手工添加类添加类、成员成员变量、成员函数变量、成员函数声明。声明。(4 4)编写具体的)编写具体的成员函数代码成员函数代码。(5 5)编译、链接程序)编译、链接程序检查程序中是否存在语法错误。检查程序中是否存在语法错误。(6 6)调试应用程序。)调试应用程序。7六、单文档【ClassView】面板CAboutDlg(CAboutDlg(关于对话框类关于对话框类)管理关于对话框。管理关于对话框。CFrameWndCFrameWnd(框架窗口类)框架窗口类)CWxling_27AppCWxling_27App(应用程序类)(应用程序类)用来处理消息。用来处理消息。CWxling_27Doc CWxling_27Doc(文档类)(文档类)MFCMFC中的数据是存储在类文档中。中的数据是存储在类文档中。文档类负责管理和维护数据本身。文档类负责管理和维护数据本身。CWxling_27ViewCWxling_27View(视图类)(视图类)结果的显示是在视图类中。结果的显示是在视图类中。视图类负责处理用户鼠标和键盘的操作。视图类负责处理用户鼠标和键盘的操作。8七、登录对话框与单文档视图联接七、登录对话框与单文档视图联接1.1.新建单文档工程:新建单文档工程:TEXTTEXT(注意此名由设计者自己任取);(注意此名由设计者自己任取);2.2.在在ResourceViewResourceView,单击单击Insert DialogInsert Dialog,插入一对话框,插入一对话框IDD_DIALOG1IDD_DIALOG1(默认(默认IDID号);号);3.3.右键选中新建的对话框,利用类向导建立一个新类右键选中新建的对话框,利用类向导建立一个新类Create a new classCreate a new class,名称为:名称为:C Cdlg_logindlg_login ;4.4.在在MainFrm.cppMainFrm.cpp文件的前面,语句文件的前面,语句#include“#include“MainFrm.hMainFrm.h”的后面的后面添加新类添加新类的头文件:的头文件:#include#include dlg_login.hdlg_login.h 5.5.在在FileViewFileView中点击中点击source filessource files,双击,双击MainFrm.cppMainFrm.cpp。找到:。找到:CMainFrame:OnCreate(LPCREATESTRUCTCMainFrame:OnCreate(LPCREATESTRUCT lpCreateStructlpCreateStruct),这是窗体框架创建函数。在该函数的后面(在这是窗体框架创建函数。在该函数的后面(在return 0;return 0;的前面)加入语句(注意大的前面)加入语句(注意大小写):小写):Cdlg_loginCdlg_login dlgdlg;/定义一个登录对话框对象定义一个登录对话框对象dlgdlgdlg.DoModaldlg.DoModal();();/让对话框对象以有模式形式显示出来让对话框对象以有模式形式显示出来6.6.此时对话框与单文档联接完成。此时对话框与单文档联接完成。7.7.下载下载“格式工厂格式工厂3.011”3.011”将自己的照片转换成将自己的照片转换成BMPBMP格式,通过插入格式,通过插入BitmapBitmap命令,将照片引入至资源中,并添加至对话框中。命令,将照片引入至资源中,并添加至对话框中。9七续、登录对话框退出按钮代码七续、登录对话框退出按钮代码/确定按钮确定按钮void CDlg_login:OnOK()void CDlg_login:OnOK()/TODO:Add extra validation/TODO:Add extra validation hereherethis-UpdateData(true);this-UpdateData(true);if(this-m_name=wxl&if(this-m_name=wxl&this-m_paw=1234)this-m_paw=1234)CDialog:OnOK();CDialog:OnOK();elseelse MessageBox(MessageBox(登录有误登录有误););ExitProcess(0);/ExitProcess(0);/退出退出/CDialog:OnOK();/CDialog:OnOK();/取消按钮取消按钮void CDlg_login:OnCancel()void CDlg_login:OnCancel()/TODO:Add extra cleanup/TODO:Add extra cleanup herehereExitProcess(0);ExitProcess(0);/退出退出 10八、单文档中菜单项与对话框联接八、单文档中菜单项与对话框联接1.1.新建单文档工程:新建单文档工程:Ys1Ys1(注意此名由设计者自己任取);(注意此名由设计者自己任取);2.2.在在ResourceViewResourceView,单击单击Insert DialogInsert Dialog,插入一对话框,插入一对话框IDD_DIALOG1IDD_DIALOG1(默认(默认IDID号)号);3.3.右键选中新建的对话框,利用类向导建立一个新类右键选中新建的对话框,利用类向导建立一个新类Create a new classCreate a new class,名称为:,名称为:C Cdlg_jcdlg_jc(自己命名自己命名),如右图,如右图1 1所示所示;4.4.在在/Ys1View.cpp:/Ys1View.cpp:文件中语句文件中语句#include Ys1View.h#include Ys1View.h的后面的后面添加新类的头文件:添加新类的头文件:#include#include dlg_jc.hdlg_jc.h 5.5.编辑主菜单如图编辑主菜单如图2 2所示:所示:6.6.在主菜下通过在主菜下通过“建立类向导建立类向导”命令,命令,从从“Class name”Class name”组合框中选择组合框中选择CYs1ViewCYs1View,如如图图3,43,4所示,并在函数所示,并在函数OnJcOnJc()()编写代码如下:编写代码如下:void CYs1View:OnJc()void CYs1View:OnJc()/TODO:Add your command handler code here/TODO:Add your command handler code here C Cdlg_jcdlg_jc jcjc;/定义一个求阶层对话框对象定义一个求阶层对话框对象jcjcjc.DoModaljc.DoModal();();/让对话框对象以有模式形式显示出来让对话框对象以有模式形式显示出来 7.7.此时单文档菜单项与对话框联接完成。此时单文档菜单项与对话框联接完成。111.求阶层按钮的代码求阶层按钮的代码使用使用MFCMFC进行程序设计时进行程序设计时,如输出结果是如输出结果是单值单值,可用以下代码作为模板可用以下代码作为模板:void Cdlg_jc:OnOK()void Cdlg_jc:OnOK()/TODO:Add extra validation here/TODO:Add extra validation hereUpdateData(TRUE);UpdateData(TRUE);/更新控件值更新控件值 double i,jsz=1.0;double i,jsz=1.0;for(i=1;i=m_srs;i+)for(i=1;i=m_srs;i+)jsz*=i;jsz*=i;/求阶乘求阶乘 m_jsz.Format(%f,jsz);m_jsz.Format(%f,jsz);/将双精度型转换为字符,将双精度型转换为字符,f f 对应浮点数对应浮点数/其中其中m_jszm_jsz为输出编辑框的成员变量名为输出编辑框的成员变量名UpdateData(FALSE);UpdateData(FALSE);/控件值更新编辑框显示控件值更新编辑框显示/CDialog:OnOK();/CDialog:OnOK();12/续上续上for(i=a;i=b;i+)for(i=a;i=b;i+)for(j=2;ji;j+)for(j=2;jTextOut(x,y,s);pDC-TextOut(x,y,s);/在指定位置输出文本在指定位置输出文本 else else pDC-TextOut(x,y,s);pDC-TextOut(x,y,s);/在指定位置输出文本在指定位置输出文本x=x+30;x=x+30;2.求素数按钮的代码求素数按钮的代码void Cdlg_zss:OnOK()void Cdlg_zss:OnOK()/TODO:Add extra validation here/TODO:Add extra validation hereUpdateData(TRUE);UpdateData(TRUE);/更新控件更新控件值值 CDC*pDC=GetDC();CDC*pDC=GetDC();/获取视图初始的客户区获取视图初始的客户区DCDC/DC/DC表示设备环境表示设备环境 int a=m_szqz;int a=m_szqz;int b=m_szzz;int b=m_szzz;int i,j,n=0;int i,j,n=0;int x=70,y=220;int x=70,y=220;CString s;CString s;if(b=100)if(bMoveTo(100,100);pDC-MoveTo(100,100);pDC-LineTo(300,500);pDC-LineTo(300,500);154.单文档菜单项中画矩形代码单文档菜单项中画矩形代码菜单项菜单项“画矩形画矩形”按钮代码:按钮代码:void CWxling_28View:OnHjx()void CWxling_28View:OnHjx()/TODO:Add your command handler code here/TODO:Add your command handler code hereCClientDC dc(this);CClientDC dc(this);CPen pen;CPen pen;/定义画笔定义画笔/创建红色创建红色3 3号粗细实线画笔号粗细实线画笔pen.CreatePen(PS_SOLID,3,RGB(pen.CreatePen(PS_SOLID,3,RGB(255255,0,0);,0,0);CPen*oldpen=dc.SelectObject(&pen);CPen*oldpen=dc.SelectObject(&pen);CBrush brush;CBrush brush;/定义画刷定义画刷/创建绿色画刷创建绿色画刷brush.CreateHatchBrush(HS_CROSS,RGB(0,brush.CreateHatchBrush(HS_CROSS,RGB(0,255255,0);,0);dc.SelectObject(&brush);dc.SelectObject(&brush);dc.Rectangle(dc.Rectangle(300,300,400,500);300,300,400,500);/画矩形画矩形 165.单文档菜单项中画椭圆代码单文档菜单项中画椭圆代码菜单项菜单项“画椭圆画椭圆”按钮代码:按钮代码:void CWxling_28View:OnHty()void CWxling_28View:OnHty()/TODO:Add your command handler code here/TODO:Add your command handler code hereCClientDC dc(this);CClientDC dc(this);CPen pen;CPen pen;/设置画笔设置画笔pen.CreatePen(PS_SOLID,3,RGB(0,255,0);pen.CreatePen(PS_SOLID,3,RGB(0,255,0);CPen*oldpen=dc.SelectObject(&pen);CPen*oldpen=dc.SelectObject(&pen);dc.Ellipse(300,100,600,300);dc.Ellipse(300,100,600,300);/画椭圆画椭圆/*(int x1,int y1,int x2,int y2)/*(int x1,int y1,int x2,int y2)(x1,y1)(x1,y1)和和(x2,y2)(x2,y2)表示所画椭圆外切矩形的左上角和右下角坐标表示所画椭圆外切矩形的左上角和右下角坐标*/*/176.单文档菜单项中画单文档菜单项中画sin曲线代码曲线代码在在/Wxl_30View.Wxl_30View.cppcpp中加入头文件:中加入头文件:#include math.h“#include math.h“菜单项菜单项“画画sinsin曲线曲线”按钮代码:按钮代码:void CWxl_30View:OnSin()void CWxl_30View:OnSin()/TODO:Add your command handler code here/TODO:Add your command handler code hereCClientDC dc(this);CClientDC dc(this);CRect rect;CRect rect;/定义矩形对象定义矩形对象GetClientRect(rect);GetClientRect(rect);int x0=rect.Width()/2;int x0=rect.Width()/2;int y0=rect.Height()/2;int y0=rect.Height()/2;dc.MoveTo(20,y0);dc.MoveTo(20,y0);dc.LineTo(rect.Width()-20,y0);dc.LineTo(rect.Width()-20,y0);dc.MoveTo(x0,20);dc.MoveTo(x0,20);dc.LineTo(x0,rect.Height()-20);dc.LineTo(x0,rect.Height()-20);double setp=3.14159/100;double setp=3.14159/100;for(int i=-200;i200;i+)for(int i=-200;imessage=WM_KEYDOWN)if(pMsg-message=WM_KEYDOWN)/键盘消息键盘消息 if(pMsg-wParam=VK_ESCAPE)if(pMsg-wParam=VK_ESCAPE)/键盘上的键盘上的EscEsc键键return TRUE;return TRUE;if(pMsg-wParam=VK_RETURN)if(pMsg-wParam=VK_RETURN)/键盘上的回车键键盘上的回车键return TRUE;return TRUE;return CDialog:PreTranslateMessage(pMsg);return CDialog:PreTranslateMessage(pMsg);228.常见问题解决方法常见问题解决方法1.1.建好建好MFCMFC之后之后(基于对话框的基于对话框的),然后点击,然后点击Insert-New ClassInsert-New Class2.2.弹出对话框之后,弹出对话框之后,Class Class Type:MFCType:MFC Class Class3.3.在在Base Base Class:CRecordsetClass:CRecordset类,点击类,点击OkOk的时候,会弹出要你添加数据的时候,会弹出要你添加数据库的对话框你就可以添加了。库的对话框你就可以添加了。(9 9)如何为)如何为MFC MFC 应用程序添加应用程序添加ODBC ODBC 功能?功能?(1 1)在文件)在文件Stdafx.hStdafx.h 文件末尾添加下面一行:文件末尾添加下面一行:#include#include/MFC ODBC database classes /MFC ODBC database classes(2 2)在文本模式下编辑)在文本模式下编辑RC RC 文件(利用文件(利用File-Open As text File-Open As text 方式)方式)在下面的程序行(共有两处)在下面的程序行(共有两处)#include#include l.chsafxprint.rcl.chsafxprint.rc /printing/print preview resources /printing/print preview resources 添加下一行:添加下一行:#include#include l.chsafxdb.rcl.chsafxdb.rc /Database resources /Database resources 239.特殊效果特殊效果(1 1)如何给)如何给MFCMFC单文档添加背景?单文档添加背景?为为CTestViewCTestView类添加一个变量类添加一个变量CBrush m_brushBackground;/CBrush m_brushBackground;/定义画刷用于画背景定义画刷用于画背景在在CTestViewCTestView的构造函数中加入如下代码的构造函数中加入如下代码CBitmap bmp;CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);/bmp.LoadBitmap(IDB_BITMAP1);/加载位图加载位图m_brushBackground.CreatePatternBrush(&bmp);/m_brushBackground.CreatePatternBrush(&bmp);/创建位图画刷创建位图画刷在在OnDrawOnDraw函数中画出来代码如下函数中画出来代码如下CRect rect;CRect rect;GetClientRect(rect);/GetClientRect(rect);/取得客户区域取得客户区域pDC-FillRect(rect,&m_brushBackground);/pDC-FillRect(rect,&m_brushBackground);/用背景画刷填充区域用背景画刷填充区域为了避免背景的闪烁,使显示更完美,添加为了避免背景的闪烁,使显示更完美,添加WM_ERASEBKGNDWM_ERASEBKGND消息的处理函数,消息的处理函数,并取消调用父类的处理函数,代码如下并取消调用父类的处理函数,代码如下BOOL CTestView:OnEraseBkgnd(CDC*pDC)BOOL CTestView:OnEraseBkgnd(CDC*pDC)return TRUE;return TRUE;编译运行该程序!编译运行该程序!249.特殊效果特殊效果(2 2)在工程调用其他可执行的文件()在工程调用其他可执行的文件(.EXE).EXE)在在w1View.cpp:w1View.cpp:中加入头文件:中加入头文件:#include windows.h#include windows.h 在编辑好的菜单项中编写代码如下在编辑好的菜单项中编写代码如下void CW1View:OnWord()void CW1View:OnWord()/TODO:Add your command handler code here/TODO:Add your command handler code hereWinExec(CLOCKYS.exe,NULL);WinExec(CLOCKYS.exe,NULL);/调用可执行文件调用可执行文件 注意:将可执行文件拷贝至本工程所在的文件夹下,否则要获取文注意:将可执行文件拷贝至本工程所在的文件夹下,否则要获取文件的路径。若要打开其他类型的文件,见本片的下面的备注。件的路径。若要打开其他类型的文件,见本片的下面的备注。259.特殊效果特殊效果(3 3)在工程调用其他任意文件菜单项按钮代码)在工程调用其他任意文件菜单项按钮代码void CW12View:OnYy()void CW12View:OnYy()/TODO:Add your command handler code here/TODO:Add your command handler code hereCString path;CString path;/返回文件所在的路径,含该文件名返回文件所在的路径,含该文件名GetModuleFileName(GetModuleFileName(NULL,NULL,/要获取文件名的模块句柄(要获取文件名的模块句柄(见备注见备注),),nullnull表示当前模块表示当前模块 path.GetBufferSetLength(MAX_PATH+1),path.GetBufferSetLength(MAX_PATH+1),/存放取得的文件名存放取得的文件名MAX_PATH MAX_PATH /存放取得的文件名参数的长度存放取得的文件名参数的长度););path.ReleaseBuffer();path.ReleaseBuffer();/字符串的缓冲区长度锁定解除字符串的缓冲区长度锁定解除 int pos=path.ReverseFind();int pos=path.ReverseFind();/从后向前查找从后向前查找 path=path.Left(pos)path=path.Left(pos)path=path.Left(pos);path=path.Left(pos);/取左取左,参数为字符串的个数参数为字符串的个数/MessageBox(path);/MessageBox(path);/调试程序时用来显示查找到的当前运行程序所在目录调试程序时用来显示查找到的当前运行程序所在目录 ShellExecute(NULL,open,path ShellExecute(NULL,open,path+2013+2013年年C+C+课程设计任务书课程设计任务书wxl.docwxl.doc,NULL,NULL,SW_SHOWNORMAL);NULL,NULL,SW_SHOWNORMAL);269.特殊效果特殊效果(4 4)仅修改工程中某个对话框的图标)仅修改工程中某个对话框的图标对对应的对话框添加初始化函数对对应的对话框添加初始化函数OnInitDialogOnInitDialog()(),并添加以下代码:并添加以下代码:BOOL Cdlg_login:OnInitDialog()BOOL Cdlg_login:OnInitDialog()CDialog:OnInitDialog();CDialog:OnInitDialog();/TODO:Add extra initialization here/TODO:Add extra initialization hereHICON m_hIcon;HICON m_hIcon;/IDR_ICON1/IDR_ICON1为图标资源名为图标资源名 m_hIcon=AfxGetApp()-LoadIcon(IDI_ICON1);m_hIcon=AfxGetApp()-LoadIcon(IDI_ICON1);SetIcon(m_hIcon,TRUE);SetIcon(m_hIcon,TRUE);/Set big icon/Set big iconSetIcon(m_hIcon,FALSE);SetIcon(m_hIcon,FALSE);/Set small icon/Set small iconreturn TRUE;return TRUE;/return TRUE unless you set the focus to a control/return TRUE unless you set the focus to a control/EXCEPTION:OCX Property Pages should return FALSE/EXCEPTION:OCX Property Pages should return FALSE279.特殊效果特殊效果如何去掉单文档界面中主框架的如何去掉单文档界面中主框架的“无标题无标题”?”?修改修改IDR_MAINFRAMEIDR_MAINFRAME字符串资源中第字符串资源中第2 2个参数个参数(共有共有7 7个参数个参数),分别以,分别以nn结束,即如下格式:结束,即如下格式:nnnnnnnnnnnnnn例例,将主框架标题改为将主框架标题改为”我的应用程序我的应用程序”28在程序中使用对话框 (4)用鼠标将新添加的菜单项拖到“查看”和“帮助”菜单项 之间,结果如图所示。菜单项“对话框”拖放后的位置(5)选择“查看”“建立类向导”菜单命令或直接按Ctrl+W快捷键,则出现MFC ClassWizard对话框,该对话框会自动切换到Message Maps页面。(6)从“Class name”组合框中选择CMainFrame,在Object Ids列表中选择ID_TEST_DLG,然后在Messages框中选择COMMAND消息。29在程序中使用对话框 (7)单击Add Function按钮或双击COMMAND消息,出现“Add Member Function”对话框以输入成员函数的名称。系统默认的函数名为OnTestDlg,如图所示。该函数是对菜单项ID_TEST_DLG的映射,也就是说,当在应用程序运行时,用户选择“对话框”,则该函数OnTestDlg被调用,执行函数中的代码。30在程序中使用对话框(8)单击OK按钮,在ClassWizard的“Member functions”列(9)表中将列出新增加的成员函数。选择此函数,单击Edit Co(10)de按钮(或直接在函数名双击鼠标),在此成员函数中添加下(11)列代码:void CMainFrame:OnTestDlg()CFirstDlg dlg;/定义对话框类对象 dlg.DoModal();/显示对话框 代码中,DoModal是CDialog基类成员函数,它是用来显示和终止模式对话框。31在程序中使用对话框(9)在OnTestDlg函数的实现文件MainFrm.cpp的前面添加(10)CFirstDlg类的头文件包含,即:#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h“(10)编译并运行。在应用程序菜单上,选择“测试”“对话框”菜单项,将出现如图的对话框,这个对话框就是刚才添加的对话框。32几种常见的几何图形绘制。几种常见的几何图形绘制。利用利用MFC AppWizardMFC AppWizard建立一个建立一个SDISDI应用程序,在应用程序,在OnDraw()OnDraw()函数中添加如下程序代码:函数中添加如下程序代码:void CMyGraphView:OnDraw(CDC*pDC)void CMyGraphView:OnDraw(CDC*pDC)CTexthtDoc*pDoc=GetDocument();CTexthtDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);/TODO:add draw code for native data here/TODO:add draw code for native data here for(int xPos=20;xPos100;xPos+=10)for(int xPos=20;xPosSetPixel(xPos,30,RGB(0,0,0);/pDC-SetPixel(xPos,30,RGB(0,0,0);/绘制像素点绘制像素点 POINT polylpt5=10,100,50,60,120,80,80,150,30,130;POINT polylpt5=10,100,50,60,120,80,80,150,30,130;pDC-Polyline(polylpt,5);/pDC-Polyline(polylpt,5);/绘制绘制4 4条折线条折线 POINT polybpt4=150,160,220,60,300,180,330,20;POINT polybpt4=150,160,220,60,300,180,330,20;pDC-PolyBezier(polybpt,4);/pDC-PolyBezier(polybpt,4);/绘制贝塞尔曲线绘制贝塞尔曲线 CBrush *pBrhOld;CBrush *pBrhOld;pBrhOld=(CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);/pBrhOld=(CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);/使用浅灰使用浅灰色堆画刷色堆画刷 pDC-RoundRect(400,30,550,100,20,20);/pDC-RoundRect(400,30,550,100,20,20);/绘制圆角矩形绘制圆角矩形 pDC-Arc(20,200,200,300,200,250,20,200);/pDC-Arc(20,200,200,300,200,250,20,200);/绘制椭圆弧绘制椭圆弧 pDC-Pie(220,200,400,380,380,270,240,220);/pDC-Pie(220,200,400,380,380,270,240,220);/绘制扇形绘制扇形 pDC-Chord(420,120,540,240,520,160,420,180);/pDC-Chord(420,120,540,240,520,160,420,180);/绘制弦形绘制弦形 POINT polygpt5=450,200,530,220,560,300,480,320,430,280;POINT polygpt5=450,200,530,220,560,300,480,320,430,280;pDC-Polygon(polygpt,5);/pDC-Polygon(polygpt,5);/绘制五边形绘制五边形 pDC