




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章
MFC典型应用程序设计11/18/20221《面向对象程序设计与VisualC++6.0教程》第12章
本章主要内容:●Windows应用程序的消息处理机制●应用程序分析●输入/输出处理程序(文本输出、键盘及鼠标消息处理等)●菜单应用程序设计●工具栏应用程序设计●状态栏应用程序设计●对话框应用程序设计●控件应用程序设计●数据库应用程序设计11/18/20222《面向对象程序设计与VisualC++6.0教程》本章主要内容:●Windows应用程序的消息处理12.1消息处理机制
●Windows程序与其他程序最大的不同之处在于使用消息机制。●Windows程序中所发生的一切都可以用消息表示,消息用于告诉操作系统所发生的事情,如按键操作或鼠标操作等。●MFC应用程序也使用基于消息的事件驱动机制,而且MFC提供的消息处理机制使得用户可以更加方便、简易的处理消息。●在Windows中,所有消息都是通过消息名进行访问的,但不同类型的消息由应用程序的不同部分进行处理。11/18/20223《面向对象程序设计与VisualC++6.0教程》12.1消息处理机制●Windows程序与其他程序1.MFC消息种类
消息机制是Windows应用程序的核心,MFC中的消息可以分为:●
Windows消息●控件通知消息●定时消息●命令消息
11/18/20224《面向对象程序设计与VisualC++6.0教程》1.MFC消息种类消息机制是WiWindows消息
●Windows消息通常指以WM开头的消息,但WM_COMMAND除外。●键盘消息和鼠标消息都属于Windows消息,Windows消息由窗口和视图进行处理。●Windows消息通常带有若干个参数传递给消息处理函数,这些参数为处理函数正确地处理消息提供了充分的信息。11/18/20225《面向对象程序设计与VisualC++6.0教程》Windows消息●Windows消息通常指以WM开头的●控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送的消息。●MFC对控件通知消息的传递方式与其他以WM开头的Windows消息一样,但BN_CLICKED例外,该消息的传递方式与命令消息的传递机制相同。●对于Windows消息和控件通知消息,MFC将消息传递给相应的窗口处理。
控件通知消息
11/18/20226《面向对象程序设计与VisualC++6.0教程》●控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送定时消息●定时消息也是Windows的一类重要消息。●当需要应用程序每隔一个指定的时间间隔便执行某一特定操作时,就需要使用定时消息WM_TIMER。●在进行定时操作时,用户需要调用SetTimer函数创建一个定时器,并设置定时器的事件标志nIDEvent及时间间隔nElapse,然后编写消息WM_TIMER的消息处理函数OnTimer(),实现定时操作。11/18/20227《面向对象程序设计与VisualC++6.0教程》定时消息●定时消息也是Windows的一类重要消息。11/命令消息●命令消息是来自于用户界面对象的WM_COMMAND消息。●包括菜单、工具栏按钮和加速键都属于命令消息等。即每当用户选择一个菜单项、单击一个按钮或需要告诉操作系统应当执行什么操作时,则发送一条WM_COMMAND命令消息。●WM_COMMAND消息的消息映射宏为OnCommand()。所有命令消息都包含有一个相同类型的参数,即该命令消息需要操作的资源ID值,由ID值映射消息处理函数。11/18/20228《面向对象程序设计与VisualC++6.0教程》命令消息●命令消息是来自于用户界面对象的WM_COMM2MFC消息映射机制
●消息映射是指将消息与处理函数相联系,即当系统产生一条消息时,它能找到处理该消息的函数。●消息映射是Windows基于消息映射的事件驱动机制的重要内容之一。11/18/20229《面向对象程序设计与VisualC++6.0教程》2MFC消息映射机制●消息映射是指将消息与处理函数相联VisualC++的消息映射宏
消息映射宏功能DECLARE_MESSAGE_MAP在头文件中使用,用于声明在源文件中存在消息映射BEGIN_MESSAGE_MAP表示消息映射的开始,用于源代码文件中END_MESSAGE_MAP表示消息映射的结束,用于源代码文件中ON_COMMAND将特定的命令消息映射到类的成员函数,即使用该成员函数处理消息ON_COMMAND_RANGE将一组特定的命令消息映射到类的成员函数11/18/202210《面向对象程序设计与VisualC++6.0教程》VisualC++的消息映射宏
消息映射宏VisualC++的消息映射分为两个方面:●一是在头文件.h中处理●一是在实现文件.cpp中处理消息映射宏11/18/202211《面向对象程序设计与VisualC++6.0教程》VisualC++的消息映射分为两个方面:消息映射宏11/消息映射举例以上一章所创建的应用程序MyWinP为例,打开该应用程序源代码,其中有以下关于消息映射的代码(见下页)。11/18/202212《面向对象程序设计与VisualC++6.0教程》消息映射举例以上一章所创建的应用程序MyW在头文件MyWinp.h中的消息映射代码
//{{AFX_MSG(CMyWinPApp) afx_msgvoidOnAppAbout(); //NOTE-theClassWizardwilladdandremovememberfunctionshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG
DECLARE_MESSAGE_MAP()11/18/202213《面向对象程序设计与VisualC++6.0教程》在头文件MyWinp.h中的消息映射代码
11/11/20在实现文件中的消息映射代码
BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp) //{{AFX_MSG_MAP(CMyWinPApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
//NOTE-theClassWizardwilladdandremovemappingmacroshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG_MAP //Standardfilebaseddocumentcommands ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //Standardprintsetupcommand ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()11/18/202214《面向对象程序设计与VisualC++6.0教程》在实现文件中的消息映射代码11/11/202214《面向对消息映射宏的使用●宏DECLARE_MESSAGE_MAP用于类声明文件的结束处,即在.h文件的结束处。●宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP用于类的实现文件(.cpp)中实现消息映射,而且这两个宏必须配合使用。11/18/202215《面向对象程序设计与VisualC++6.0教程》消息映射宏的使用●宏DECLARE_MESSAGE_MAP用●在BEGIN_MESSAGE_MAP与END_MESSAGE_MAP中间列出了消息映射的各个入口。例如,以下消息映射语句:ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)表示当用户单击了菜单项File|Open时,则发送WM_COMMAND消息,该消息找到此语句,发现资源ID值与资源ID_FILE_OPEN匹配,则执行该语句中指定的成员函数CWinApp::OnFileOpen()。消息映射宏的使用(续)11/18/202216《面向对象程序设计与VisualC++6.0教程》●在BEGIN_MESSAGE_MAP与END_MESSAG向导AppWizard生成的单文档应用程序一般包括四个基本类:●应用程序类●主框架窗口类●文档类和●视图类12.2应用程序分析11/18/202217《面向对象程序设计与VisualC++6.0教程》向导AppWizard生成的单文档应用程序一般包1.AppWizard向导生成的类和文件●单击项目工作区的ClassView标签,则显示CMainFrame、CMyWinPApp、CMyWinPDoc和CMyWipView等,这是应用程序MyWinP的全部类。●利用AppWizard向导创建应用程序框架时,产生的各派生类将被创建单独的源文件。●单击某一类名(如CMyWinPView)前的“+”号,则列出该类的成员函数,双击类名或成员函数名(如GetDocument),则源代码编辑区显示出该类或该成员函数的实现代码。11/18/202218《面向对象程序设计与VisualC++6.0教程》1.AppWizard向导生成的类和文件●单击项目工作区的观察应用程序MyWinP的类和文件11/18/202219《面向对象程序设计与VisualC++6.0教程》观察应用程序MyWinP的类和文件11/11/202219●MyWinP程序的应用程序类名为CMyWinPApp,由CwinApp类派生而来。●该类的每一个对象代表一个应用程序,程序中默认定义一个全局对象theApp。●CMyWinPApp类的功能是管理整个应用程序,负责程序的启动、初始化、窗口的创建以及从Windows中获取消息并将消息分发到适当的目的地。CMyWinPApp类的声明在头文件MyWinPApp.h中,类的实现在CMyWinPApp.cpp中。(1)应用程序类
11/18/202220《面向对象程序设计与VisualC++6.0教程》●MyWinP程序的应用程序类名为CMyWinPApp,由●CMyWinP应用程序的主框架窗口类名为CMainFrame,它由CWnd的一个子类派生而来,该子类即CFrameWnd。●CMainFrame类的声明在头文件MainFrame.h中,类的实现在文件MainFrame.cpp中。●CMainFrame类管理主框架窗口,并拥有一些如菜单、工具栏和状态栏等控件,同时,它还扮演转发菜单和工具栏消息的角色。(2)主框架架窗口类
11/18/202221《面向对象程序设计与VisualC++6.0教程》●CMyWinP应用程序的主框架窗口类名为CMainFram●CMyWinP应用程序的文档类名为CMyWinPDoc,从MFC的CDocument类派生而来。其类的声明在头文件CMyWinPDoc.h中,类的实现在文件CMyWinPDoc.cpp中。●文档类的主要作用是保存应用程序的数据,并提供磁盘文件操作。●用户需要修改文档类,增加成员变量以存储应用程序的数据、增加成员函数以获得和修改数据,然后为应用程序服务。(3)文档类
11/18/202222《面向对象程序设计与VisualC++6.0教程》●CMyWinP应用程序的文档类名为CMyWinPDoc,●CMyWinP应用程序的视图类名为CMyWinPView,类的声明在头文件MyWinPView.h中,而类的实现在文件MyWinPView.cpp中。●视图类主要管理视图窗口,负责用户数据的输入和数据的输出显示。●在创建一个单文档应用程序时,也可以选择将视图类从非CView类的其他子类派生出来,例如,在BaseClass中选择CEditView作为基本视图类,则可以很方便的得到一个简易的字处理程序。(4)视图类
11/18/202223《面向对象程序设计与VisualC++6.0教程》●CMyWinP应用程序的视图类名为CMyWinPVie(5)其他文件
●除以上主要类之外,AppWizard还自动生成Stdafx.cpp和stdafx.h两个文件。这两个文件是每个基于MFC程序所必需的,●用于建立一个预编译头文件*.pch和一个预定义的类型文件stdafx.obj。●MFC包含很多头文件,如果每次都编译则比较费时,将afxwin.h、afxext.h、afxcmn.h、afxdisp.h都放在stdafx.h文件中,这样编译系统可以识别哪些文件已经编译过,以加速应用程序的编译过程。11/18/202224《面向对象程序设计与VisualC++6.0教程》(5)其他文件●除以上主要类之外,AppWizar2.应用程序的运行机制
Windows应用程序的执行过程如下:●自动调用应用程序框架内的WinMain函数。WinMain()自动查找由CWinApp派生类构造函数创建的全局对象theApp。●WinMain函数调用调用Initlnstance成员函数,完成应用程序实例的初始化。●WinMain函数调用Run成员函数,进入消息循环。●WinMain函数退出,调用有关成员函数进行必要的清理工作,程序运行中止。11/18/202225《面向对象程序设计与VisualC++6.0教程》2.应用程序的运行机制Windows应用程序的执行过12.3输入/输出处理程序
●输入输出处理是几乎所有Windows应用程序最基本的功能之一●Windows应用程序通过对键盘消息和鼠标消息的响应完成对用户输入的处理●通过GDI提供的绘图函数在窗口的客户区输出信息。11/18/202226《面向对象程序设计与VisualC++6.0教程》12.3输入/输出处理程序●输入输出处理是几乎所有Win1.文本输出程序
文本输出指在窗口客户区特定位置输出用户指定的相关文本信息。在MFC中,CDC类实现了对设备环境的封装,CDC类有许多成员函数,完成各种与设备环境有关的操作。11/18/202227《面向对象程序设计与VisualC++6.0教程》1.文本输出程序文本输出指在窗口客户区DrawText函数
DrawText函数是CDC类用于文本输出的成员函数之一,它的作用是在指定矩形区域内以当前字体、颜色等属性及指定的显示方式显示字符串。DrawText函数的格式如下:形式一:virtualintDrawText(LPCTSTRlpszString,intnCount,LPRECTlpRect,UINTnFormat);形式二:intDrawText(constCString&str,LPRECTlpRect,UINTnFormat);11/18/202228《面向对象程序设计与VisualC++6.0教程》DrawText函数DrawText函数是参数含义●参数1pszString是指向输出字符串的指针;●参数nCount指定字符串的长度,如果为-1,则1pszString是一个指向以null结尾的字符串的长指针;●参数lpRect是指向RECT结构的指针;●参数nFormat用于指定输出格式;●str表示存储字符串的CString对象。11/18/202229《面向对象程序设计与VisualC++6.0教程》参数含义●参数1pszString是指向输出字符串的指针;1TextOut函数
●TextOut函数也是CDC类用于文本输出的成员函数,它的作用是在指定的起点坐标上,以当前字体、颜色等属性显示字符串。●TextOut函数格式:形式一:virtualintTextOut(intx,inty,LPCTSTRlpszString,intnCount);形式二:BOOLTextOut(intx,inty,constCString&str);11/18/202230《面向对象程序设计与VisualC++6.0教程》TextOut函数●TextOut函数也是CDC类用于文本参数含义●参数x,y表示欲显示字符串起点坐标;●参数lpszString指向要显示字符串的指针;●参数nCount指定字符串的长度;●str存储字符串的CString对象。11/18/202231《面向对象程序设计与VisualC++6.0教程》参数含义●参数x,y表示欲显示字符串起点坐标;11/11/OnDraw函数
voidOnDraw(CDC*pDC)
●OnDraw函数是视图类的一个重要成员函数。●成员函数OnDraw管理文档类成员变量的显示,即OnDraw函数主要用于更新视图窗口。11/18/202232《面向对象程序设计与VisualC++6.0教程》OnDraw函数●OnDraw函数是视图类的一个重要成员GetDocument函数
●GetDocument函数返回一个指向关联文档对象的指针。●通过GetDocument函数返回的文档对象指针,视图对象可以调用文档类及其派生类的成员函数或直接读取文档对象的公有数据成员,获取应用程序的数据。●GetDocument函数的格式如下:CDocument*GetDocument()const
11/18/202233《面向对象程序设计与VisualC++6.0教程》GetDocument函数●GetDocument函数返回2键盘输入处理程序
●键盘是Windows应用程序一个非常重要的输入手段,当用户按下或释放一个按键时,键盘驱动程序KEYBOARD.DRV中的键盘中断程序将对按键进行编码,并由用户模块USER.EXE生成键盘消息,最终发送到消息队列中等待处理,而处理键盘消息则是由应用程序的窗口来具体完成的。●在Windows系统下,键盘由所有运行的应用程序共享,但不管用户打开了多少个应用程序,任何情况下只有一个窗口能接受到按键消息。●Windows环境下接受到按键消息的窗口称为“有输入焦点”的窗口。
11/18/202234《面向对象程序设计与VisualC++6.0教程》2键盘输入处理程序●键盘是Windows应用程序一个非键盘消息
在Windows应用程序运行时若用户按下一个键,就会产生一个键盘消息,如:●WM_KEYDOWN●WM_KEYUP●WM_SYSKEYDOWN●WM_SYSKEYUP其中WM_SYSKEYDOWN、WM_SYSKEYUP中的SYS表示系统按键消息,由Windows处理,应用程序只需处理WM_KEYDOWN和WM_KEYUP等非系统按键消息。11/18/202235《面向对象程序设计与VisualC++6.0教程》键盘消息在Windows应用程序运行时若用户afx_msgvoidOnChar(UNITnChar,UINTnRepCnt,UINTnFlags)WM_CHAR的消息处理函数:
●nChar表示按键的字符代码值;●nRepCnt表示按键的重复次数,因此若用户按下某键不放,该参数值将不断增加;●nFlags用于传递按键的扫描码、转换码、键的先前状态、上一次按键状态等相关信息。11/18/202236《面向对象程序设计与VisualC++6.0教程》WM_CHAR的消息处理函数:●nChar表示按键的字符虚拟键代码
●键盘上每一个有意义的键都对应着一个惟一的标识值,即键盘扫描码,当用户按下或释放一个按键时,都会产生扫描码。●扫描码是依赖于具体设备的。Windows应用程序中一般使用与具体设备无关的虚拟码。●虚拟码是Windows系统内部定义的与设备无关的键盘标识,从而有效避免了键盘对应用程序的影响,提高了应用程序的通用性。11/18/202237《面向对象程序设计与VisualC++6.0教程》虚拟键代码●键盘上每一个有意义的键都对应着一个惟一的标识值部分常用的虚拟键代码
虚拟键代码对应功能键虚拟键代码对应功能键VK_INSERTInsert浆VK_DOWN↓(箭头向下)VK_LEFT←(左箭头)VK_NEXTPageDown键VK_RIGHT→(右箭头)VK_BACKBackSpace键VK_UP↑(箭头向上)VK_RETURNEnter键VK_A~Z字母A~ZVK_TABTab键11/18/202238《面向对象程序设计与VisualC++6.0教程》部分常用的虚拟键代码虚拟键代码对应功能键虚拟键代码对应功能显示键盘输入字符程序的实现方法●利用AppWizard向导生成项目名为MyWinKey的应用程序框架。●在应用程序框架中添加保存字符的数据成员(既可以利用向导添加,也可以手工添加)。●在应用程序框架中通过ClassWizard向导添加消息处理函数。●编译并运行应用程序即可实现将键盘输入的字符在窗口客户区显示。
这仅仅是实现步骤,详细实现方法应在VisualC++6.0环境下,具体讲授。11/18/202239《面向对象程序设计与VisualC++6.0教程》显示键盘输入字符程序的实现方法●利用AppWizard向导生3.鼠标处理程序
●鼠标是一种得到广泛应用的定位输入设备。●通过鼠标的单击、双击和拖动功能,用户可以方便的操作Windows的图形界面应用程序。●Windows应用程序的鼠标消息,可以被任何窗口接受,只要鼠标移动到该窗口并有鼠标按键消息,该窗口就可以接受到鼠标消息,而与该窗口是否活动窗口或是否带有输入焦点没有关系。
11/18/202240《面向对象程序设计与VisualC++6.0教程》3.鼠标处理程序●鼠标是一种得到广泛应用的定位输入设备。鼠标消息
●windows操作系统通过鼠标驱动程序接受鼠标输入消息,由鼠标设备驱动程序捕捉Windows的任何鼠标事件。●当用户移动鼠标释放鼠标按键时,将产生鼠标消息。鼠标消息可以分为客户区鼠标消息和非客户区鼠标消息。●鼠标在窗口客户区移动时产生WM_MOUSEMOVE消息.鼠标在客户区产生的消息由Windows应用程序处理,而在窗口边界、菜单、标题栏和滚动条等非客户区产生的鼠标消息一般由Windows系统处理。
11/18/202241《面向对象程序设计与VisualC++6.0教程》鼠标消息●windows操作系统通过鼠标驱动程序接受鼠标●鼠标消息属于Windows消息●鼠标消息均可直接利用VisualC++6.0的ClassWizard向导添加鼠标消息处理函数●与鼠标消息对应的消息处理函数如表12-3所示。消息处理函数
11/18/202242《面向对象程序设计与VisualC++6.0教程》●鼠标消息属于Windows消息消息处理函数11/11/2常用鼠标消息处理函数表
鼠标消息消息处理函数备注WM_MOUSEMOVEvoidOnMouseMove(UINTnFlags,CPointpoint)鼠标移动WM_LBUTTONDOWNvoidOnLButtonDown(UINTnFlags,CPointpoint)单击鼠标左键WM_MBUTTONDOWNvoidOnMButtonDown(UINTnFlags,CPointpoint)单击鼠标中键WM_RBUTTONDOWNvoidOnRButtonDown(UINTnFlags,CPointpoint)单击鼠标右键WM_LBUTTONUPvoidOnLButtonUp(UINTnFlags,CPointpoint)鼠标左键释放11/18/202243《面向对象程序设计与VisualC++6.0教程》常用鼠标消息处理函数表鼠标消息消鼠标消息处理函数表(续)WM_MBUTTONUPvoidOnMButtonUp(UINTnFlags,CPointpoint)鼠标中键释放WM_RBUTTONUPvoidOnRButtonUp(UINTnFlags,CPointpoint)鼠标右键释放WM_LBUTTONDBLICKvoidOnLButtonDblClk(UINTnFlags,CPointpoint)双击鼠标左键WM_MBUTTONDBLICKvoidOnMButtonDblClk(UINTnFlags,CPointpoint)双击鼠标中键WM_RBUTTONDBLICKvoidOnRButtonDblClk(UINTnFlags,CPointpoint)双击鼠标右键11/18/202244《面向对象程序设计与VisualC++6.0教程》鼠标消息处理函数表(续)WM_MBUTTONUPvoid画笔的使用方法
●先定义自己的画笔对象,取代默认的画笔●将自定义画笔选入设备环境,用指针变量保存默认的画笔;●用设备环境中的画图工具绘图●销毁自定义画笔,恢复设备环境的默认画笔11/18/202245《面向对象程序设计与VisualC++6.0教程》画笔的使用方法●先定义自己的画笔对象,取代默认的画笔11/12.4菜单应用程序设计
●创建友好的用户界面是开发应用程序的一项重要任务。●菜单(Menu)是windows应用程序不可缺少的重要组成部分,它是应用程序命令项的列表。菜单是用户与应用程序进行交互的主要方式之一。
●VisualC++可以方便的得到美观、适用、友好的用户界面。11/18/202246《面向对象程序设计与VisualC++6.0教程》12.4菜单应用程序设计●创建友好的用户界面是开发应用1.菜单简介
●菜单主要包括下拉式和弹出式两种。●弹出式菜单是为了响应单击鼠标右键而激活的弹出的菜单,可以出现在屏幕的任何位置。●下拉式菜单由上层水平列表项以及与其相连的弹出式菜单组成,当用户选择了上层某个列表项时,与之关联的弹出式菜单就会出现,而且可以形成级联菜单。●MFC类库将菜单操作封装在CMenu类中,所有关于菜单的操作都可以通过CMenu类的成员函数实现。11/18/202247《面向对象程序设计与VisualC++6.0教程》1.菜单简介
●菜单主要包括下拉式和弹出式两种。11/1菜单的基本属性●菜单的基本属性主要包括标识符(ID)、标题(Caption)和提示(Prompt)三大要素。●标识符用来在程序中唯一标识菜单项。●标题是实际显示在菜单上的文字信息,用户选择菜单时首先看到的就是标题,提示是用户在查看某个菜单时,显示在窗口底端的文字信息。
11/18/202248《面向对象程序设计与VisualC++6.0教程》菜单的基本属性●菜单的基本属性主要包括标识符(ID)、标题2.菜单资源编辑器
●VisualC++为用户提供了一个便捷的菜单编辑器(
MenuEditor)。●当用户使用AppWizard创建单文档(SDI)或多文档(MDI)应用程序时,系统将为应用程序自动生成默认的菜单栏。●用户打开菜单编辑器,进行适当修改,再编写各菜单项相应的消息处理函数即可。11/18/202249《面向对象程序设计与VisualC++6.0教程》2.菜单资源编辑器●VisualC++为用户提供了●在项目工作区(Workspace)窗口中选择ResourceView选项卡●双击项目名,则应用程序所有的资源以树状形式显示出来●双击Menu文件夹,列出所有菜单的标识符,对于单文档应用程序则只有唯一的菜单资源IDR_MAINFRAME,双击该标识符,就打开了菜单编辑器。如下页图所示:
菜单资源编辑器:11/18/202250《面向对象程序设计与VisualC++6.0教程》●在项目工作区(Workspace)窗口中选择Resourc菜单资源编辑器界面11/18/202251《面向对象程序设计与VisualC++6.0教程》菜单资源编辑器界面11/11/202251《面向对象程序设计●具有当前焦点的菜单条四周拥有一个灰色的边框,是用户正在编辑的菜单条。●如果用户想在当前菜单条前添加一个新的菜单条,按下Insert键,在该菜单条前将会出现一个新的空白菜单条,然后为其设置属性。●删除菜单时,用户应将当前焦点移至该菜单处,使用Delete键进行删除操作。如果此菜单条是菜单选项,则系统将直接将其删除;而当此菜单条是一个下拉菜单时,系统会提示用户是否删除整个下拉菜单,若回答“是”,则系统将该菜单条所包含的所有菜单项全部删除。菜单资源编辑器的使用11/18/202252《面向对象程序设计与VisualC++6.0教程》●具有当前焦点的菜单条四周拥有一个灰色的边框,是用户正在编辑●若菜单项的首字母都带有下划线,表示该字母是一个快捷键,用户可以通过快捷键打开该菜单项。●加速键是指用户通过按一组组合键的方式直接执行该菜单命令,而不用先打开该菜单项。●快捷键作用是打开菜单但并没有执行菜单命令●加速键的作用是执行菜单命令(如Ctrl+C直接执行复制功能)但却没有打开菜单项。加速键与快捷键11/18/202253《面向对象程序设计与VisualC++6.0教程》●若菜单项的首字母都带有下划线,表示该字母是一个快捷键,用户形式一:BOOLRectangle(LPCRECTlpRect);
形式二:
BOOLRectangle(intx1,inty1,intx2,inty2);参数lpRect是指向RECT结构或Crect对象的指针
参数x1,y1用于指定矩形区域左上角坐标,参数x2,y2用于指定矩形区域右下角坐标。
Rectangle绘图函数
11/18/202254《面向对象程序设计与VisualC++6.0教程》形式一:Rectangle绘图函数11/11/202254形式一:BOOLEllipse(LPCRECTlpRect);
形式二:
BOOLEllipse(intx1,inty1,intx2,inty2);参数x1,y1用于指定矩形区域左上角坐标,参数x2,y2用于指定矩形区域右下角坐标。
Ellipse绘图函数11/18/202255《面向对象程序设计与VisualC++6.0教程》形式一:Ellipse绘图函数11/11/202255《面12.5工具栏应用程序设计
●工具栏也是Windows应用程序中常见的用户界面。●Windows应用程序中,为方便用户使用,通常将常用的菜单项提取出来,例如常用的文件菜单项(New、Open等)、编辑菜单项(Copy、Cut、Paste等)组成工具栏。●如果说菜单是Windows程序常用的界面元素,那么在很多情况下,工具栏可以更快捷、更方便、更有效、更直观的进行某些操作。11/18/202256《面向对象程序设计与VisualC++6.0教程》12.5工具栏应用程序设计●工具栏也是Windows应1.工具栏简介
●工具栏是应用程序中一组提供快捷操作的工具,通常将常用的命令放在工具栏中。●工具栏由多个工具栏按钮组成,其中每一个按钮代表一个功能选项,这样对于常用的命令可以直接进行操作,而不用每次都打开菜单栏进行选择,从而可以方便用户操作。11/18/202257《面向对象程序设计与VisualC++6.0教程》1.工具栏简介●工具栏是应用程序中一组提供快捷操作的工具工具栏按钮形式●工具栏按钮有命令按钮和复选框按钮等形式。如Word中的打开文件、保存文件、打印等都是命令按钮形式。●对于复选按钮,第一次单击后,保持选中状态,同时可以选择其他按钮来配合产生一定的效果,Word中使用的加黑(B)、下划线(U)和斜体(I)就是标准的复选按钮,当再次单击时,则按钮恢复初始状态。11/18/202258《面向对象程序设计与VisualC++6.0教程》工具栏按钮形式●工具栏按钮有命令按钮和复选框按钮等形式。如2.使用资源编辑器创建工具栏
●CToolBar类封装了工具栏的功能。●AppWizard向导在创建的应用程序的主框架窗口类CMainFrame中添加一个CToolBar类的数据成员m_wndToolBar,并在主框架窗口类CMainFrame的成员函数OnCreate中创建工具栏。
11/18/202259《面向对象程序设计与VisualC++6.0教程》2.使用资源编辑器创建工具栏●CToolBar类封装了●AppWizard向导为所创建的应用程序加入了系统预定义的工具栏。●应用中应根据应用程序的具体要求,通过工具栏编辑器,修改预定义的工具栏或生成新的工具栏。●系统预定义工具栏具有停靠功能,主框架窗口能够接受工具栏的停靠。●通常情况下,工具栏中的按钮对应于菜单中的选项,所以,在定义工具栏的按钮时,也会定义相应的菜单项。使用资源编辑器创建工具栏(续)11/18/202260《面向对象程序设计与VisualC++6.0教程》●AppWizard向导为所创建的应用程序加入了系统预定义
●创建新工具栏时,可以选择菜单项Insert|Resource,弹出如下页图所示的添加工具栏(InsertResource)对话框。
●在该对话框中双击Toolbar资源类型(或选择Toolbar并单击New按钮)即可进入工具栏资源编辑器创建新的工具栏资源。创建新工具栏11/18/202261《面向对象程序设计与VisualC++6.0教程》●创建新工具栏时,可以选择菜单项Insert|ResourInsertResource对话框界面
11/18/202262《面向对象程序设计与VisualC++6.0教程》InsertResource对话框界面11/11/202●编辑已有的工具栏资源,可以选择项目工作区的ResourceView选项卡,单击Toolbar●双击所需要编辑的工具栏资源(如IDR_MAINFRAME)即可,如下页图所示工具栏资源编辑器11/18/202263《面向对象程序设计与VisualC++6.0教程》●编辑已有的工具栏资源,可以选择项目工作区的Resource工具栏资源编辑器界面
11/18/202264《面向对象程序设计与VisualC++6.0教程》工具栏资源编辑器界面11/11/202264《面向对象程序工具栏资源编辑器中有两个视图窗口:●一个是预览窗口,其中显示正常大小的工具栏,包含用户已经添加的工具栏按钮,用户可以从这个窗口中预览当前工具栏的外观,并且可以在其中选择当前编辑的工具栏按钮,当前编辑的工具栏按钮处于明显凹状态。●另一个视图窗口是编辑窗口,显示当前工具栏按钮的放大位图,用户可以利用资源编辑器中的Graphics图形工具栏来创建或编辑工具栏按钮的位图资源。工具栏资源编辑器的应用11/18/202265《面向对象程序设计与VisualC++6.0教程》工具栏资源编辑器中有两个视图窗口:工具栏资源编辑器的应用11●当创建完一个工具栏按钮后,已有的按钮之后将会出现一个新的空白按钮,用户可以按照顺序依次创建工具栏按钮。●也可以改变工具栏上按钮的排列顺序:在预览窗口中选中第一个按钮,然后用鼠标将其拖放至另一个按钮处,即可交换这两个按钮的顺序。●更新按钮的位图:则需先选中此按钮,按下Delete键即可刷新其位图资源。●删除按钮:用户只须在预览窗口中选中该按钮,按下鼠标左键不放,将此按钮拖出预览窗口区域即可。工具栏资源编辑器的应用(续)11/18/202266《面向对象程序设计与VisualC++6.0教程》●当创建完一个工具栏按钮后,已有的按钮之后将会出现一个新的空12.6状态栏应用程序设计
●状态栏的作用是在程序的控制下,显示当前程序的执行状态或简要的说明信息,例如,当选取某工具或菜单项时,在状态栏中显示说明文字。●状态栏既不接受用户输入也不产生命令消息。●状态栏可支持两种类型的文本窗口,分别是信息行窗口和状态指示器窗口。11/18/202267《面向对象程序设计与VisualC++6.0教程》12.6状态栏应用程序设计●状态栏的作用是在程序的控制
状态栏的实现
●一般情况下,状态栏位于Windows应用程序窗口的底部,通常由一系列的面板(Pane)组成。●状态栏用于文本输出或指示器,其中常见的指示符有CapsLock、NumLock、ScrollLock等。●如果在AppWizard向导的Step4对话框中选择了Initialstatusbar项,那么AppWizard向导生成的应用程序就拥有一个默认的状态栏。11/18/202268《面向对象程序设计与VisualC++6.0教程》状态栏的实现 ●一般情况下,状态栏位于Windows应用创建状态栏的目的是提供一个输出区域,定义提示信息,建立特定状态和提示信息的联系。CStatusBar类封装了状态栏的功能。通过AppWizard向导创建应用程序时:●向导在应用程序的主框架窗口类CMainFrame中定义了一个CStatusBar类的数据成员mwndStatusBar。●在主框架程序MainFram.cpp中定义状态栏指示器标识符数组IndicatorIDs。●在主框架窗口类的成员函数OnCreate中创建状态栏。状态栏的实现(续)11/18/202269《面向对象程序设计与VisualC++6.0教程》创建状态栏的目的是提供一个输出区域,定义提示12.7对话框应用程序
●对话框是程序与用户之间的交互的工具。例如打开文件、查询以及进行其他数据交换时都需要使用对话框,从最简单的询问“是”与“否”的消息框,到复杂的数据处理框,都可以用对话框来完成。●对话框是一个窗口,它继承于MFC的CWnd类,它具备了窗口的很多属性,不仅可以接受消息、可以被移动和关闭,而且还可以在它的客户区中进行绘图操作。●在设计对话框时可以把控件直接粘到对话框,以实现各种操作。11/18/202270《面向对象程序设计与VisualC++6.0教程》12.7对话框应用程序●对话框是程序与用户之间的交互的1.对话框的分类
对话框按其动作模式分为:●模式对话框●无模式对话框11/18/202271《面向对象程序设计与VisualC++6.0教程》1.对话框的分类对话框按其动作模式分为:11/11/20模式对话框
●MFC的对话框类(CDialog)既支持模式对话框也支持无模式对话框。●对于模式对话框,如OpenFile对话框,在同一个应用程序中,只有该对话框被关闭后,才能对程序的其他功能进行操作。●模式对话框被打开之后,对话框就接管了父窗口的输入控制权,并掌握了控制权。只有当用户关闭了该对话框之后,对话框才会把控制权交给父窗口。11/18/202272《面向对象程序设计与VisualC++6.0教程》模式对话框●MFC的对话框类(CDialog)既支持模式无模式对话框
无模式对话框:●对话框与父窗口共享控制权●用户可以在主窗口和对话框之间来回切换●在对话框仍保留在屏幕上的同时,用户还可以在应用程序的其他窗口中进行操作11/18/202273《面向对象程序设计与VisualC++6.0教程》无模式对话框无模式对话框:11/11/202.常用对话框类
所有对话框类的基类是CDialog常用对话框类包括:●文件存取对话框类●颜色设定对话框类●字型设定对话框类●打印设定对话框类●字符串搜索与替换对话框类11/18/202274《面向对象程序设计与VisualC++6.0教程》2.常用对话框类所有对话框类的基类是CDialog11/3.对话框的常用函数
函数功能Cdialog::Create创建无模式对话框CWnd::UpdateData设定对话框控制项的数据或取得控制项数据CWnd::GetDlgltem获得子窗口或对话框内部控制项对象的指针CWnd::GetDlgltemText获得控制项的标题或字符串内容CWnd::GetDlgltemInt获得控制项的文本内容,并转换为整数CWnd::SetDlgltemText设定控件显示的文本内容CWnd::SetDlgltemInt将整数转换为文本并赋予控件CWnd::DlgDirSelect获得列表框当前选定项的字符串内容11/18/202275《面向对象程序设计与VisualC++6.0教程》3.对话框的常用函数函数功CWnd::DlgDirList将指定路径下符合文件属性和描述的所有文件加到列表框中CWnd::CheckDlgButton设置/取消按钮的标记符或更改一个三态按钮的状态CWnd::CheckRadioButton标记指定的圆形按钮,同时删除同组的其他圆形按钮的标记符CWnd::GetCheckRadioButton获得指定组群中标记了的圆形按钮代码CscrollBar::SetScrollRange设定滚动条的范围(最大最小位置值)CscrollBar::SetScrollPos设定滚动条的位置CscrollBar::GetScrollRange获得滚动条的滚动范围CscrollBar::GetScrollPos获得滚动条的当前位置对话框的常用函数(续)11/18/202276《面向对象程序设计与VisualC++6.0教程》CWnd::DlgDirList将指定路径下符合文件属性和描对话框的创建一般可以按以下步骤进行:●对话框界面设计●生成管理对话框的新类●定义数据成员●定义消息及消息处理函数●对话框的显示等相关工作创建对话框的一般步骤
11/18/202277《面向对象程序设计与VisualC++6.0教程》对话框的创建一般可以按以下步骤进行:创建对话框的一般步骤112.8控件应用程序设计
●Windows应用程序中控件的应用随处可见,任意打开一个窗口或对话框,一般都具有各种各样的控件,如命令按钮、静态文本、编辑框、列表框等。●控件是一种子窗口,应用程序用它来与其他窗口一起完成简单的输入输出操作。●在Windows应用程序中,窗口和对话框是框架或容器,控件是灵魂。11/18/202278《面向对象程序设计与VisualC++6.0教程》12.8控件应用程序设计●Windows应用程序中控1.控件简介
●控件是一种特殊的对象,是Windows应用程序和用户进行交互的重要手段。●控件的使用很好的体现了Windows系统面向对象的特点。●控件通常可以出现在对话框或工具栏中,也可以出现在窗口中。●VisualC++6.0提供了各种控件来实现直观、方便、快捷的交互。11/18/202279《面向对象程序设计与VisualC++6.0教程》1.控件简介●控件是一种特殊的对象,是Windows在VisualC++中,控件可以分为:●Windows常用控件●ActiveX控件●其他MFC类库所支持的控件控件的分类11/18/202280《面向对象程序设计与VisualC++6.0教程》在VisualC++中,控件可以分为:控件的分类11/11Windows常用控件
Windows常用控件包括使用频率最高的标准控件和用户自定义控件,如:
●静态文本控件●命令按钮控件●编辑框控件●列表框控件●复选框控件●组合框控件●滚动条控件11/18/202281《面向对象程序设计与VisualC++6.0教程》Windows常用控件Windows常用控ActiveX控件
ActiveX控件又称为OLE控件,常用于Windows应用程序的对话框中,或用于WWW的网页中。11/18/202282《面向对象程序设计与VisualC++6.0教程》ActiveX控件ActiveX控件又其他MFC类库所支持的控件
除Windows常用控件和ActiveX控件之外,MFC类库还支持:●CBitmapButton控件●CCheckListBox控件●CDragListBox控件●CProgressCtr控件●CStatusBar控件等11/18/202283《面向对象程序设计与VisualC++6.0教程》其他MFC类库所支持的控件除Windows常用控件和Act2.常用控件类
控件MFC类简要说明静态文本控件CStatic用于为其他控件显示文本标签图形控件CStatic用于显示图标编辑框控件CEdit用于文本输入的控件组框控件CComboBox将列表框和编辑框控件有机组合按钮控件CButton用于执行命令单选按钮CButton用于对互相排斥的选项进行选择复选框CButton用于选择多个独立的选项水平滚动条控件CScrollBar提供水平滚动功能垂直滚动条控件CScrollBar提供垂直滚动功能列表框控件CListBox以列表的方式给用户提供选择11/18/202284《面向对象程序设计与VisualC++6.0教程》2.常用控件类控件MFC类简要说明静态文本控件CStat3.创建控件
一般情况下,利用VisualC++资源编辑器创建控件的步骤如下:●打开资源编辑器,利用控件工具栏可视化地向对话框或窗口中添加所需要的控件。●构造对话框对象。●调用该对象的成员函数Create()或DoModal,系统自动创建相应控件并将其放入对话框窗口中。11/18/202285《面向对象程序设计与VisualC++6.0教程》3.创建控件一般情况下,利用VisualC+12.9数据库应用程序
VisualC++提供了以下多种数据库访问技术:
●ODBC●DAO●ADO11/18/202286《面向对象程序设计与VisualC++6.0教程》12.9数据库应用程序VisualC++提供了以下多种1.ODBC技术概述
●ODBC即开放数据库连接。●ODBC为各种类型的数据库管理系统提供了统一的编程接口,用户可以轻松自如地在应用程序中进行跨数据库的操作。●ODBC结构是分层管理的,ODBC包含了一组动态链接库(DLL),拥有一个独特的DLL结构。●ODBC系统完全实现了模块化,这些动态链接库提供了标准的数据库应用程序开发接口,通过它可以实现对所有含有ODBC驱动程序数据库的访问。11/18/202287《面向对象程序设计与VisualC++6.0教程》1.ODBC技术概述●ODBC即开放数据库连接。11/1ODBC技术概述(续)●MFC类库的CRecordset和CDatabase封装了基于ODBC的数据库操作。●CDatabase类的对象代表了与数据源ODBC的连接,而Crecordset类的对象则代表了记录集。●ODBC是基于SQL结构化查询语言而开发的,并且它还定义了C/C++语言与SQL数据库之间的接口。11/18/202288《面向对象程序设计与VisualC++6.0教程》ODBC技术概述(续)●MFC类库的CRecordset和●通过ODBC技术,用户在编程时不用关心数据库的类型以及数据的存储格式,用同样的ODBC数据库访问函数就可以实现对各种数据库进行操作。●如果用户需要在程序中访问实际数据,首先需要建立一个ODBC数据源,然后再通过ODBC接口对数据进行访问。ODBC技术概述(续)11/18/202289《面向对象程序设计与VisualC++6.0教程》●通过ODBC技术,用户在编程时不用关心数据库的类型以及数据2.ADO技术●ADO(ActiveDataObject)即活动数据对象,是Microsoft为数据库应用程序开发推出的新的数据库访问技术。●ADO实际上一种基于组件对象模型的自动化接口技术,它以对象链接和嵌入的数据库(OLEDB)为基础,利用它可以快速的创建数据库应用程序。●利用ADO技术访问数据库,无需首先在Windows的ODBC数据管理器中注册数据源,在程序设计过程中就可以完成与数据库的连接工作。
11/18/202290《面向对象程序设计与VisualC++6.0教程》2.ADO技术●ADO(ActiveDataObj参加课内外讨论11/18/202291《面向对象程序设计与VisualC++6.0教程》参加课内外讨论11/11/202291《面向对象程序设计与V本章结束11/18/202292《面向对象程序设计与VisualC++6.0教程》本章结束11/11/202292《面向对象程序设计与Visu第12章
MFC典型应用程序设计11/18/202293《面向对象程序设计与VisualC++6.0教程》第12章
本章主要内容:●Windows应用程序的消息处理机制●应用程序分析●输入/输出处理程序(文本输出、键盘及鼠标消息处理等)●菜单应用程序设计●工具栏应用程序设计●状态栏应用程序设计●对话框应用程序设计●控件应用程序设计●数据库应用程序设计11/18/202294《面向对象程序设计与VisualC++6.0教程》本章主要内容:●Windows应用程序的消息处理12.1消息处理机制
●Windows程序与其他程序最大的不同之处在于使用消息机制。●Windows程序中所发生的一切都可以用消息表示,消息用于告诉操作系统所发生的事情,如按键操作或鼠标操作等。●MFC应用程序也使用基于消息的事件驱动机制,而且MFC提供的消息处理机制使得用户可以更加方便、简易的处理消息。●在Windows中,所有消息都是通过消息名进行访问的,但不同类型的消息由应用程序的不同部分进行处理。11/18/202295《面向对象程序设计与VisualC++6.0教程》12.1消息处理机制●Windows程序与其他程序1.MFC消息种类
消息机制是Windows应用程序的核心,MFC中的消息可以分为:●
Windows消息●控件通知消息●定时消息●命令消息
11/18/202296《面向对象程序设计与VisualC++6.0教程》1.MFC消息种类消息机制是WiWindows消息
●Windows消息通常指以WM开头的消息,但WM_COMMAND除外。●键盘消息和鼠标消息都属于Windows消息,Windows消息由窗口和视图进行处理。●Windows消息通常带有若干个参数传递给消息处理函数,这些参数为处理函数正确地处理消息提供了充分的信息。11/18/202297《面向对象程序设计与VisualC++6.0教程》Windows消息●Windows消息通常指以WM开头的●控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送的消息。●MFC对控件通知消息的传递方式与其他以WM开头的Windows消息一样,但BN_CLICKED例外,该消息的传递方式与命令消息的传递机制相同。●对于Windows消息和控件通知消息,MFC将消息传递给相应的窗口处理。
控件通知消息
11/18/202298《面向对象程序设计与VisualC++6.0教程》●控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送定时消息●定时消息也是Windows的一类重要消息。●当需要应用程序每隔一个指定的时间间隔便执行某一特定操作时,就需要使用定时消息WM_TIMER。●在进行定时操作时,用户需要调用SetTimer函数创建一个定时器,并设置定时器的事件标志nIDEvent及时间间隔nElapse,然后编写消息WM_TIMER的消息处理函数OnTimer(),实现定时操作。11/18/202299《面向对象程序设计与VisualC++6.0教程》定时消息●定时消息也是Windows的一类重要消息。11/命令消息●命令消息是来自于用户界面对象的WM_COMMAND消息。●包括菜单、工具栏按钮和加速键都属于命令消息等。即每当用户选择一个菜单项、单击一个按钮或需要告诉操作系统应当执行什么操作时,则发送一条WM_COMMAND命令消息。●WM_COMMAND消息的消息映射宏为OnCommand()。所有命令消息都包含有一个相同类型的参数,即该命令消息需要操作的资源ID值,由ID值映射消息处理函数。11/18/2022100《面向对象程序设计与VisualC++6.0教程》命令消息●命令消息是来自于用户界面对象的WM_COMM2MFC消息映射机制
●消息映射是指将消息与处理函数相联系,即当系统产生一条消息时,它能找到处理该消息的函数。●消息映射是Windows基于消息映射的事件驱动机制的重要内容之一。11/18/2022101《面向对象程序设计与VisualC++6.0教程》2MFC消息映射机制●消息映射是指将消息与处理函数相联VisualC++的消息映射宏
消息映射宏功能DECLARE_MESSAGE_MAP在头文件中使用,用于声明在源文件中存在消息映射BEGIN_MESSAGE_MAP表示消息映射的开始,用于源代码文件中END_MESSAGE_MAP表示消息映射的结束,用于源代码文件中ON_COMMAND将特定的命令消息映射到类的成员函数,即使用该成员函数处理消息ON_COMMAND_RANGE将一组特定的命令消息映射到类的成员函数11/18/2022102《面向对象程序设计与VisualC++6.0教程》VisualC++的消息映射宏
消息映射宏VisualC++的消息映射分为两个方面:●一是在头文件.h中处理●一是在实现文件.cpp中处理消息映射宏11/18/2022103《面向对象程序设计与VisualC++6.0教程》VisualC++的消息映射分为两个方面:消息映射宏11/消息映射举例以上一章所创建的应用程序MyWinP为例,打开该应用程序源代码,其中有以下关于消息映射的代码(见下页)。11/18/2022104《面向对象程序设计与VisualC++6.0教程》消息映射举例以上一章所创建的应用程序MyW在头文件MyWinp.h中的消息映射代码
//{{AFX_MSG(CMyWinPApp) afx_msgvoidOnAppAbout(); //NOTE-theClassWizardwilladdandremovememberfunctionshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG
DECLARE_MESSAGE_MAP()11/18/2022105《面向对象程序设计与VisualC++6.0教程》在头文件MyWinp.h中的消息映射代码
11/11/20在实现文件中的消息映射代码
BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp) //{{AFX_MSG_MAP(CMyWinPApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
//NOTE-theClassWizardwilladdandremovemappingmacroshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG_MAP //Standardfilebaseddocumentcommands ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //Standardprintsetupcommand ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()11/18/2022106《面向对象程序设计与VisualC++6.0教程》在实现文件中的消息映射代码11/11/202214《面向对消息映射宏的使用●宏DECLARE_MESSAGE_MAP用于类声明文件的结束处,即在.h文件的结束处。●宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP用于类的实现文件(.cpp)中实现消息映射,而且这两个宏必须配合使用。11/18/2022107《面向对象程序设计与VisualC++6.0教程》消息映射宏的使用●宏DECLARE_MESSAGE_MAP用●在BEGIN_MESSAGE_MAP与END_MESSAGE_MAP中间列出了消息映射的各个入口。例如,以下消息映射语句:ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)表示当用户单击了菜单项File|Open时,则发送WM_COMMAND消息,该消息找到此语句,发现资源ID值与资源ID_FILE_OPEN匹配,则执行该语句中指定的成员函数CWinApp::OnFileOpen()。消息映射宏的使用(续)11/18/2022108《面向对象程序设计与VisualC++6.0教程》●在BEGIN_MESSAGE_MAP与END_MESSAG向导AppWizard生成的单文档应用程序一般包括四个基本类:●应用程序类●主框架窗口类●文档类和●视图类12.2应用程序分析11/18/2022109《面向对象程序设计与VisualC++6.0教程》向导AppWizard生成的单文档应用程序一般包1.AppWizard向导生成的类和文件●单击项目工作区的ClassView标签,则显示CMainFrame、CMyWinPApp、CMyWinPDoc和CMyWipView等,这是应用程序MyWinP的全部类。●利用AppWizard向导创建应用程序框架时,产生的各派生类将被创建单独的源文件。●单击某一类名(如CMyWinPView)前的“+”号,则列出该类的成员函数,双击类名或成员函数名(如GetDocument),则源代码编辑区显示出该类或该成员函数的实现代码。11/18/2022110《面向对象程序设计与VisualC++6.0教程》1.AppWizard向导生成的类和文件●单击项目工作区的观察应用程序MyWinP的类和文件11/18/2022111《面向对象程序设计与VisualC++6.0教程》观察应用程序MyWinP的类和文件11/11/202219●MyWinP程序的应用程序类名为CMyWinPApp,由CwinApp类派生而来。●该类的每一个对象代表一个应用程序,程序中默认定义一个全局对象theApp。●CMyWinPApp类的功能是管理整个应用程序,负责程序的启动、初始化、窗口的创建以及从Wi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游类自媒体账号定制化运营及推广补偿协议
- 装修安装免责协议书
- 道路损坏补偿协议书
- 车辆洗车承包协议书
- 贷款展期还款协议书
- 车祸出院赔偿协议书
- 车辆协助解压协议书
- 车辆损伤赔付协议书
- 餐饮物业转让协议书
- 人才引进安家费协议书
- 2024审计常用法规定性表述及适用
- 作文写作(解析版)-2025年上海中考语文专项复习
- 2025-2030年中国电力勘察设计行业现状分析规划研究报告新版
- 2025年中国广东省内装配式建筑行业市场发展监测及投资战略咨询报告
- 2025福建省晋江水务集团限公司招聘17人高频重点提升(共500题)附带答案详解
- 亚文化认同与身份建构-洞察分析
- 深度学习完整版本
- AI培训课件教学课件
- 【培训课件】管理沟通
- 2024-2030年中亚五国水泥行业发展规模及需求前景预测报告
- DB31-T 1385-2022 科技成果分类评价和价值潜力评价规范
评论
0/150
提交评论