C++课程设计MFC.ppt
《C++课程设计MFC.ppt》由会员分享,可在线阅读,更多相关《C++课程设计MFC.ppt(148页珍藏版)》请在三一办公上搜索。
1、1,C+课程设计,内容及要求,2,主要内容,课程设计基本要求Windows 编程基础什么是C+的MFC什么是MFC编程MFC应用程序的开发流程单文档【ClassView】面板登录对话框与单文档视图联接单文档中菜单项与对话框联接实例介绍,3,一、课程设计基本要求,自学MFC(2学时)知识扩充C+:了解并掌握MFC程序结构、消息映射机制、MFC类库中的常用类(对话框、各种常用控件)。软件开发的基本知识结合设计任务清楚软件开发的基本流程、各个阶段的目标和主要工作。上机调试程序(30学时)其他(14学时)程序调试的基本方法和论文撰写要求(2学时)掌握调试程序的方法与技巧。清楚论文组织结构、格式编排等相
2、关知识学生资料查阅与自主学习(2学时)代码编写(10学时),4,二、Windows 编程基础,Windows 编程就是基于Windows 的应用程序。2种重要的Windows应用程序基于对话框的应用程序基于文档/视图结构的应用程序主要特点具有标准的图形用户界面具有与硬件无关的特性采用“消息传递,事件驱动”的运行机制,即根据Windows发送的消息来处理用户的输入编写Windows应用程序的主要方法(2种)使用Windows提供的应用程序接口(API)函数使用Microsoft提供的微软基础类(MFC),5,三、什么是C+的MFC,MFC(Microsoft Foundation Class L
3、ibrary,基础类库)是微软提供的用来编写Windows应用程序的C+类库;封装了API(Windows的接口函数),是Win API与C+的结合。MFC大约有200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。即它由几百个执行文件和源代码文件组成。注意C+和VC+的区别C+是一种程序设计语言,是一种大家都承认的软件编制的通用规范,即C+是一套语法规则的名字,类似汉语,英语。VC+是一个软件IDE(编译、编辑、调试)集成开发环境 MFC是一个非外挂式的软件包,类库,MFC类是微软为VC+专配的。,6,四、什么是MFC编程,MFC编程指的就是使用VC+进行开发,并且是在使用
4、VC+提供的各种向导的情况下的MFC编程。在VC+中可以创建3类典型的Windows应用程序基于对话框的应用程序单文档界面(SDI)应用程序多文档界面(MDI)应用程序,文档/视图文档对象:用来保存数据。视图对象:用来显示和编辑数据。,7,五、MFC应用程序的开发流程,应用程序编程的基本步骤:(1)根据应用程序的特性在MFC AppWizardexe应用程序中选择合适的应用程序框架。(2)利用资源编辑器编辑资源,如菜单等。(3)利用类向导(ClassWizard)或手工添加类、成员变量、成员函数声明。(4)编写具体的成员函数代码。(5)编译、链接程序检查程序中是否存在语法错误。(6)调试应用程
5、序。,8,六、单文档【ClassView】面板,CAboutDlg(关于对话框类)管理关于对话框。CFrameWnd(框架窗口类)CWxling_27App(应用程序类)用来处理消息。CWxling_27Doc(文档类)MFC中的数据是存储在类文档中。文档类负责管理和维护数据本身。CWxling_27View(视图类)结果的显示是在视图类中。视图类负责处理用户鼠标和键盘的操作。,9,七、登录对话框与单文档视图联接,新建单文档工程:TEXT(注意此名由设计者自己任取);在ResourceView,单击Insert Dialog,插入一对话框IDD_DIALOG1(默认ID号);右键选中新建的对话
6、框,利用类向导建立一个新类Create a new class,名称为:Cdlg_login;在MainFrm.cpp文件的前面,语句#include“MainFrm.h”的后面添加新类的头文件:#include dlg_login.h 在FileView中点击source files,双击MainFrm.cpp。找到:CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct),这是窗体框架创建函数。在该函数的后面(在return 0;的前面)加入语句(注意大小写):Cdlg_login dlg;/定义一个登录对话框对象dlgdlg.DoModal()
7、;/让对话框对象以有模式形式显示出来此时对话框与单文档联接完成。下载“格式工厂3.011”将自己的照片转换成BMP格式,通过插入Bitmap命令,将照片引入至资源中,并添加至对话框中。,10,七续、登录对话框退出按钮代码,/确定按钮void CDlg_login:OnOK()/TODO:Add extra validation herethis-UpdateData(true);if(this-m_name=wxl,/取消按钮void CDlg_login:OnCancel()/TODO:Add extra cleanup hereExitProcess(0);/退出,11,八、单文档中菜单项
8、与对话框联接,新建单文档工程:Ys1(注意此名由设计者自己任取);在ResourceView,单击Insert Dialog,插入一对话框IDD_DIALOG1(默认ID号);右键选中新建的对话框,利用类向导建立一个新类Create a new class,名称为:Cdlg_jc(自己命名),如右图1所示;在/Ys1View.cpp:文件中语句#include Ys1View.h的后面添加新类的头文件:#include dlg_jc.h 编辑主菜单如图2所示:在主菜下通过“建立类向导”命令,从“Class name”组合框中选择CYs1View,如图3,4所示,并在函数OnJc()编写代码如下
9、:void CYs1View:OnJc()/TODO:Add your command handler code here Cdlg_jc jc;/定义一个求阶层对话框对象jcjc.DoModal();/让对话框对象以有模式形式显示出来此时单文档菜单项与对话框联接完成。,12,1.求阶层按钮的代码,使用MFC进行程序设计时,如输出结果是单值,可用以下代码作为模板:void Cdlg_jc:OnOK()/TODO:Add extra validation hereUpdateData(TRUE);/更新控件值 double i,jsz=1.0;for(i=1;i=m_srs;i+)jsz*=i;
10、/求阶乘 m_jsz.Format(%f,jsz);/将双精度型转换为字符,f 对应浮点数/其中m_jsz为输出编辑框的成员变量名UpdateData(FALSE);/控件值更新编辑框显示/CDialog:OnOK();,13,/续上for(i=a;iTextOut(x,y,s);/在指定位置输出文本 else pDC-TextOut(x,y,s);/在指定位置输出文本x=x+30;,2.求素数按钮的代码,void Cdlg_zss:OnOK()/TODO:Add extra validation hereUpdateData(TRUE);/更新控件值 CDC*pDC=GetDC();/获取视
11、图初始的客户区DC/DC表示设备环境int a=m_szqz;int b=m_szzz;int i,j,n=0;int x=70,y=220;CString s;if(b=100)/控制只求100内的素,使用MFC进行程序设计时,如输出结果是多值,可用以下代码作为模板:,14,注:CDC类有4个派生类,CClientDC类只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏的空白区域)进行绘图。CMetaFileDC封装了在一个Windows图元文件中绘图的方法。CPaintDC只在处理WM_PAINT消息中使用,用户一旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)
12、的指针来使用。CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。,在微软基类库MFC中,CDC类是定义设备上下文(DC,设备环境)对象的基类,所有绘图函数都在CDC基类中定义。,15,3.单文档菜单项中画直线代码,菜单项“画直线”按钮代码:void CYs1View:OnHzx()/TODO:Add your command handler code here/使用CClientDC类来画图,创建的是视图窗口的dc对象,作图只能在视图的客服区内作图Invalidate(true);/擦除窗口原有内容重新绘制UpdateWindow();/使窗口立即重绘CClie
13、ntDC dc(this);/创建一个名为dc的视图窗口的dc对象,this指向当前的对话框CPen pen;/设置画笔/创建一支5号粗细画实线的绿色画笔,pen.CreatePen(PS_SOLID,5,RGB(0,255,0);/选用新画笔CPen*oldpen=dc.SelectObject(/线段的终点/RGB(红,绿,蓝),或用CDC类绘图void CYs1View:OnHzx()/Invalidate(true);/刷新屏幕CDC*pDC=GetDC();pDC-MoveTo(100,100);pDC-LineTo(300,500);,16,4.单文档菜单项中画矩形代码,菜单项“画
14、矩形”按钮代码:void CWxling_28View:OnHjx()/TODO:Add your command handler code hereCClientDC dc(this);CPen pen;/定义画笔/创建红色3号粗细实线画笔pen.CreatePen(PS_SOLID,3,RGB(255,0,0);CPen*oldpen=dc.SelectObject(/画矩形,17,5.单文档菜单项中画椭圆代码,菜单项“画椭圆”按钮代码:void CWxling_28View:OnHty()/TODO:Add your command handler code hereCClientDC
15、dc(this);CPen pen;/设置画笔pen.CreatePen(PS_SOLID,3,RGB(0,255,0);CPen*oldpen=dc.SelectObject(/画椭圆/*(int x1,int y1,int x2,int y2)(x1,y1)和(x2,y2)表示所画椭圆外切矩形的左上角和右下角坐标*/,18,6.单文档菜单项中画sin曲线代码,在/Wxl_30View.cpp中加入头文件:#include math.h“菜单项“画sin曲线”按钮代码:void CWxl_30View:OnSin()/TODO:Add your command handler code he
16、reCClientDC dc(this);CRect rect;/定义矩形对象GetClientRect(rect);int x0=rect.Width()/2;int y0=rect.Height()/2;dc.MoveTo(20,y0);dc.LineTo(rect.Width()-20,y0);dc.MoveTo(x0,20);dc.LineTo(x0,rect.Height()-20);double setp=3.14159/100;for(int i=-200;i200;i+)dc.SetPixel(x0+(i/300.0)*rect.Width()/2.0,y0-sin(setp*
17、i)*rect.Height()/4.0,RGB(255,0,0);,19,7.单文档菜单项中画澳运图标代码,void CA12View:OnHy()/TODO:Add your command handler code hereCClientDC dc(this);CPen pen1,pen2,pen3,pen4,pen5;/设置画笔pen1.CreatePen(PS_SOLID,5,RGB(0,0,255);/兰色pen2.CreatePen(PS_SOLID,5,RGB(0,0,0);/黑色pen3.CreatePen(PS_SOLID,5,RGB(255,0,0);/红色pen4.Cr
18、eatePen(PS_SOLID,5,RGB(255,255,0);/黄色pen5.CreatePen(PS_SOLID,5,RGB(0,255,0);/绿色/创建一支透明画刷,这样先前画的图不会被后面画的挡住CBrush brush1;/设置画刷,在对话框不要此句/类名可以调用静态成员函数,而不可以调用非静态成员函数。但是对象都可以调用。CBrush*brush1=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);/CBrush*pOldbrush=dc.SelectObject(brush1);/选择透明画刷,在对话框不要此句 CBru
19、sh*pOldbrush=dc.SelectObject(/画红色圆,20,8.常见问题解决方法,(1)如何删除一个新建的类?先从workspace中的fileview中删除对应的.h和.cpp文件。再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件。再删除.clw文件。打开项目,全部重建(rebuild all)。(2)某个类突然在工作区间里面突然看不见了?只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了(3)为什么MFC 中自动显示成员列表功能时有时无?删除该项目扩展名为.ncb 文件,重新打开该项目。(4)如何在应用
20、程序中打开一个超级链接?使用ShellExecute API 函数。例:打开中南大学网站。,NULL,NULL,SW_SHOWNORMAL);,ShellExecute函数原型:HINSTANCE ShellExecute(HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd);,21,8.常见问题解决方法,(5)怎样改变VC+编辑器默认的颜色?工具/选择/格式,选中注释的颜色即可改变。(6)复制了一段代码到当前工作空间里,可是代码排列很乱,如何调整?
21、按下鼠标左键拖动鼠标将代码选择上,同时按下键盘的ALT+F8 键(7)设置单文档中标题栏和窗口大小对主框架添加函数PreCreateWindow(),代码如下:BOOL CMainFrame:PreCreateWindow(CREATESTRUCT,22,8.常见问题解决方法,(8)如何处理按回车或ESC键对话框关闭?主要是由于回车键响应OnOK()函数、ESC键响应OnCancel()函数而引起的,解决方法是在Cdlg_js类中添加PreTranslateMessage函数(将按键消息转换成字符消息),代码如下,使用消息传递时过滤掉这两个键盘消息。BOOL Cdlg_js:PreTransl
22、ateMessage(MSG*pMsg)/TODO:Add your specialized code here and/or call the base classif(pMsg-message=WM_KEYDOWN)/键盘消息 if(pMsg-wParam=VK_ESCAPE)/键盘上的Esc键return TRUE;if(pMsg-wParam=VK_RETURN)/键盘上的回车键return TRUE;return CDialog:PreTranslateMessage(pMsg);,23,8.常见问题解决方法,建好MFC之后(基于对话框的),然后点击Insert-New Class弹
23、出对话框之后,Class Type:MFC Class在Base Class:CRecordset类,点击Ok的时候,会弹出要你添加数据库的对话框你就可以添加了。(9)如何为MFC 应用程序添加ODBC 功能?(1)在文件Stdafx.h 文件末尾添加下面一行:#include/MFC ODBC database classes(2)在文本模式下编辑RC 文件(利用File-Open As text 方式)在下面的程序行(共有两处)#include l.chsafxprint.rc/printing/print preview resources 添加下一行:#include l.chsafx
24、db.rc/Database resources,24,9.特殊效果,(1)如何给MFC单文档添加背景?为CTestView类添加一个变量CBrush m_brushBackground;/定义画刷用于画背景在CTestView的构造函数中加入如下代码CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);/加载位图m_brushBackground.CreatePatternBrush(编译运行该程序!,25,9.特殊效果,(2)在工程调用其他可执行的文件(.EXE)在w1View.cpp:中加入头文件:#include windows.h 在编辑好的菜单项中编写代码
25、如下void CW1View:OnWord()/TODO:Add your command handler code hereWinExec(CLOCKYS.exe,NULL);/调用可执行文件注意:将可执行文件拷贝至本工程所在的文件夹下,否则要获取文件的路径。若要打开其他类型的文件,见本片的下面的备注。,26,9.特殊效果,(3)在工程调用其他任意文件菜单项按钮代码void CW12View:OnYy()/TODO:Add your command handler code hereCString path;/返回文件所在的路径,含该文件名GetModuleFileName(NULL,/要获
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 MFC

链接地址:https://www.31ppt.com/p-6154053.html