子任务1:MFC应用程序概述.ppt

上传人:壹****1 文档编号:570179512 上传时间:2024-08-02 格式:PPT 页数:74 大小:1.10MB
返回 下载 相关 举报
子任务1:MFC应用程序概述.ppt_第1页
第1页 / 共74页
子任务1:MFC应用程序概述.ppt_第2页
第2页 / 共74页
子任务1:MFC应用程序概述.ppt_第3页
第3页 / 共74页
子任务1:MFC应用程序概述.ppt_第4页
第4页 / 共74页
子任务1:MFC应用程序概述.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《子任务1:MFC应用程序概述.ppt》由会员分享,可在线阅读,更多相关《子任务1:MFC应用程序概述.ppt(74页珍藏版)》请在金锄头文库上搜索。

1、子任务子任务1 1:简单:简单MFCMFC应用程序设计应用程序设计 2.1 Windows应用程序概述 2.2 MFC应用程序框架 2.3 消息映射与消息处理 2.4 程序调试 2.5 应用实例Visual C+Visual C+程序设计与应用教程程序设计与应用教程第第2 2章章1Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.1Windows应用程序概述应用程序概述 WindowsWindows应应用用程程序序运运行行于于WindowsWindows操操作作系系统统上上,与与DOSDOS应用程序有着本质的区别。应用程序有着本质的区

2、别。 所所有有的的WindowsWindows应应用用程程序序都都是是由由消消息息驱驱动动的的,消消息处理是所有息处理是所有WindowsWindows应用程序的核心。应用程序的核心。2Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.1.1 2.1.1 窗口窗口 窗窗口口是是用用户户界界面面中中最最重重要要的的部部分分。它它是是屏屏幕幕上上与与一一个个应应用用程程序序相相对对应应的的矩矩形形区区域域,是是用用户户与与产生该窗口的应用程序之间的可视界面产生该窗口的应用程序之间的可视界面。 3Visual C+程序设计与应用教程2024

3、/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 窗口是由应用程序创建的一个用于窗口是由应用程序创建的一个用于接收接收用户输入和用户输入和显示显示输输出的矩形区域出的矩形区域。是系统管理应用程序的基本单位。是系统管理应用程序的基本单位。窗口由窗口由“非客户区非客户区”和和“客户区客户区”组成。组成。非客户区非客户区由由系统系统绘制,包括菜单、工具栏、最大化按钮绘制,包括菜单、工具栏、最大化按钮等。等。客户区客户区由由应用程序应用程序绘制,用于输出数据和接受用户的输绘制,用于输出数据和接受用户的输入。入。当用户启动一个程序时,一个窗口就创建了。用户每次单击窗口,应用程序就会作出响应,

4、关闭一个窗口会使应用程序结束。编写一个编写一个Windows应用程序应用程序首先首先应创建一个或多个窗口,应创建一个或多个窗口,随后随后应用程序的运行过程即是窗口内部、窗口与窗口之间、应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行窗口与系统之间进行数据处理与数据交换数据处理与数据交换的过程。的过程。4Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.1.2消息和事件消息和事件Windows是是 一一 个个 基基 于于 事事 件件 的的 消消 息息 驱驱 动动 系系 统统 ,Windows应应用用程程序序是是按按照照

5、“事事件件消消息息处处理理”非非顺顺序序的的机制运行的。机制运行的。所所谓谓消消息息,就就是是用用于于描描描描述述述述某某某某个个个个事事事事件件件件发发发发生生生生的的的的信信信信息息息息,而而事事件件是是对对于于Windows的的某某种种操操作作。事事件件是是因因,消消息息是是果果,事件事件产生产生消息,消息消息,消息对应对应事件。事件。所所谓谓消消息息的的处处理理,其其实实质质就就是是事事件件的的处处理理。当当有有某某个个事事件件(如如单单击击鼠鼠标标、键键盘盘输输入入和和执执行行菜菜单单命命令令等等)发发生生时时,Windows会会根根据据具具体体的的事事件件产产生生对对应应的的消消息

6、息,并并发发送送到到指指定定应应用用程程序序的的消消息息队队列列。应应用用程程序序从从消消息息队队列列中中取取出出消消息息,并根据不同的消息进行,并根据不同的消息进行不同的处理不同的处理。5Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 初始化应用程序初始化并创建应用程序窗口进入消息循环并获取消息是否是WM_QUIT消息是否是应用程序处理的消息输入消息系统消息消息处理函数开始默认处理函数结束windows应用程序的执行过程YNNY6Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础

7、2.1.3基本数据类型基本数据类型Windows编程中常用的编程中常用的基本数据类型基本数据类型的的别名别名。7Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 8Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.1.4句柄句柄句句柄柄是是Windows编编程程的的基基础础,所所谓谓句句柄柄就就是是Windows使用的一种无重复整数使用的一种无重复整数。句句柄柄主主要要用用来来标标识识应应用用程程序序中中的的一一个个对对象象,如如窗窗口口、实例、菜单、内存、输出设备、控制或文件等

8、。实例、菜单、内存、输出设备、控制或文件等。WINDOWS应应用用程程序序只只能能访访问问句句柄柄,不不能能直直接接访访问问句句柄所指的实际数据。柄所指的实际数据。(1) 句柄是一个 4 字节的整数,Windows 利用它标识应用程序创建和使用的资源,包括应用程序实例、窗口、菜单、控件、内存、外设、文件以及与图形相关的画笔、刷子等.(2) 句柄是 Windows 内部表资源数据存储的内存索引值,Windows 利用它可以访问表中的信息。通常,在程序中要访问某个资源时,需要提供该资源的句柄,因此,句柄可理解为是内存的索引值。9Visual C+程序设计与应用教程2024/8/2任务单元二任务单元

9、二 :MFCMFC编程基础编程基础 Windows常见的公用句柄类型如下表所示:常见的公用句柄类型如下表所示:10Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 由于对应的由于对应的MFCMFC类已对句柄进行类已对句柄进行了了封装封装,大多数,大多数情况下不再需要情况下不再需要访问句柄。访问句柄。 句柄是消息与API函数的参数,采用MFC编写应用程序时,可以通过访问类的一个public的成员变量来得到某个对象的句柄。11Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.2 MF

10、C2.2 MFC应用程序框架应用程序框架下下面面通通过过一一个个实实例例介介绍绍利利用用MFCAppWizardexe创建应用程序框架的步骤。创建应用程序框架的步骤。2.2.1创建创建MFC应用程序框架应用程序框架12Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 【例例2.12.1】编编写写一一个个SDISDI单单文文档档应应用用程程序序Li2_1Li2_1,程程序序运运行行后后,通过消息框输出通过消息框输出“这是一个单文档应用程序!这是一个单文档应用程序!”的提示信息。的提示信息。 (1) 选择File菜单下的New菜单项,系统弹出

11、New对话框。 单击单击输入输入工程名保存文件路径默认默认13Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 单文档单文档界面界面(SDI)(SDI)应用应用程序。应用程序运行时,程序。应用程序运行时,只能打开只能打开一一个文档。个文档。多文档多文档界面界面(MDI)(MDI)应用应用程序。应用程序可以同程序。应用程序可以同时打开时打开多多个文档。个文档。基于对话框基于对话框的应用程序。的应用程序。应用程序将显示一个简应用程序将显示一个简单的对话框来处理用户单的对话框来处理用户的输入,的输入, (2) (2) MFC MFC AppWi

12、zard-Step AppWizard-Step 1 1对对话话框框主主要要用用于于选选择择应应用用程程序序类型。类型。AppWizardAppWizard可以创建可以创建3 3种种类型的应用程序框架。类型的应用程序框架。语言种类语言种类是否支持是否支持文档文档/ /视图视图结构结构14Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (3)MFC (3)MFC AppWizard-Step AppWizard-Step 2 2 of of 6 6对对话话框框中中主主要要用用于于选选择择应用程序所支持应用程序所支持数据库数据库方式。方式。

13、不不包含任何数据库支持包含任何数据库支持包含包含最低限度最低限度的数据库的数据库支持支持创建对应表的一个创建对应表的一个数据数据库类库类和一个和一个视图类视图类,不,不附加标准文件支持附加标准文件支持创建对应表的一个数据创建对应表的一个数据库类和一个视图类,并库类和一个视图类,并附加附加标准文件支持标准文件支持15Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (4)(4)在在MFC MFC AppWizard-Step AppWizard-Step 3 3 of of 6 6对对话话框框中中选选择择应应用用程程序所支持的序所支持的复合

14、文档复合文档类型类型。不不支持任何复合文档支持任何复合文档应用程序作为复合文档容器,包含应用程序作为复合文档容器,包含可以链接或嵌入的可以链接或嵌入的ActiveXActiveX对象对象应用程序仅仅可以创建能够嵌入到应用程序仅仅可以创建能够嵌入到其他应用程序中的文档,但是不能其他应用程序中的文档,但是不能作为一个单独运行的应用程序作为一个单独运行的应用程序应用程序可以单独运行,同时也可应用程序可以单独运行,同时也可以作为一个对象嵌入到其他应用程以作为一个对象嵌入到其他应用程序中序中应用程序能够作为容器包含嵌入或应用程序能够作为容器包含嵌入或链接的链接的ActiveXActiveX对象,同时也能

15、够作对象,同时也能够作为一个可以嵌入到其他程序中的对为一个可以嵌入到其他程序中的对象象16Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (5)(5)在在MFC MFC AppWizard-Step AppWizard-Step 4 4 of of 6 6对对话话框框中中设设置置应应用用程程序的序的外观外观特征。特征。添加添加工具栏工具栏自动生成自动生成状态栏状态栏添加添加打印和打印预览打印和打印预览菜单项菜单项在帮助菜单中自动在帮助菜单中自动添加索引和添加索引和使用帮助使用帮助菜单项菜单项使应用程序的外观呈使应用程序的外观呈三维三维显

16、示显示消息应用程序接口消息应用程序接口应用程序具有应用程序具有TCP/IPTCP/IP通信功能通信功能传统风格工具条传统风格工具条Internet ExplorerInternet Explorer风格工具条风格工具条17Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (6) (6) 在在MFC MFC AppWizard-Step AppWizard-Step 5 5 of of 6 6对对话话框框中中设设置置应应用用程程序序的的风格风格。创建创建标准标准的的MFCMFC应用程序应用程序创建类似于创建类似于WindowsWindows

17、资源管资源管理器理器风格的应用程序风格的应用程序在生成的程序框架的源文在生成的程序框架的源文件中件中加入注释加入注释不加不加入注释信息入注释信息使用使用动态链接库动态链接库 使用使用静态链接库静态链接库 18Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (7) (7) 在在MFC MFC AppWizard-Step AppWizard-Step 6 6 of of 6 6对对话话框框中中,可可以以设设置向导生成的置向导生成的文件名文件名和和类名类名。设置类名设置类名设置文件名设置文件名19Visual C+程序设计与应用教程2024

18、/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (8)(8)打打 开开 项项 目目 工工 作作 区区 中中 的的 ClassViewClassView类类 视视 图图 , 单单 击击CLi2_1ViewCLi2_1View类类左左边边的的“+”+”展展开开视视图图类类,双双击击打打开开OnDrawOnDraw()()函数,并添加代码。函数,并添加代码。voidCLi2_1View:OnDraw(CDC*pDC)CLi2_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahereMess

19、ageBox(这是一个单文档应用程序!这是一个单文档应用程序!,消息框消息框,MB_ICONEXCLAMATION|MB_OKCANCEL);20Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (9) (9) 选选择择BuildBuild菜菜单单中中的的Build Build Li2_1.exeLi2_1.exe菜菜单单项项,对对工工程程进进行行编编译译和和链链接接,生生成成可可执执行行文文件件。再再选选择择BuildBuild菜菜单中的单中的Execute Li2_1.exeExecute Li2_1.exe菜单命令运行程序。菜单命令

20、运行程序。21Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系: 2.2.2MFC应用程序框架结构类应用程序框架结构类根类命令相关类应用程序类窗口类文档类视图类框架窗口类线程基类22Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 1.C1.CObjectObject类类 CObjectCObject是是MFCMFC类类库库的的根根类类,它它几几乎乎描描述述了了所所有有MFCMFC类类的的一一些些公公共共特特性性

21、,并并且且给给所所有有由由它它派派生生出出的的类类提提供供了了3 3种种重重要要特特性性, ,即即:串串行行化化支支持持、运运行行时时类类信信息支持息支持以及以及诊断和调试支持诊断和调试支持。 2.C2.CCmdTargetCmdTarget类类 命命令令类类CCmdTargetCCmdTarget是是CObjectCObject的的子子类类,它它是是MFCMFC库库中中所所有有具具有有消消息息映映射射属属性性的的类类的的公公共共基基类类。从从CCmdTargetCCmdTarget派派生生的的类类能能在在程程序序运运行行时时动动态态创创建建对对象象和处理命令消息。和处理命令消息。 23Vis

22、ual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 3.CWinApp3.CWinApp类类 应应用用程程序序类类CWinAppCWinApp是是CWinThreadCWinThread的的子子类类,封封装装了了初初始始化化、运运行行、终终止止应应用用程程序序的的代代码码。可可以以由由此此派派生生自自己己的的应应用用类类。4 4个个成成员员函函数数实实现现传传统统的的应应用用程程序序winMain()的工作。的工作。InitInstance(),应应用用程程序序的的初初始始化化;创创建建文文档档模模板板、文文档、视图与主档、视图与主窗口;窗口;R

23、un(),隐隐藏藏在在基基类类中中,发发送送应应用用程程序序的的消消息息到到窗窗口口,保保持持应用程序的正常运行应用程序的正常运行,处理消息循环,处理消息循环;OnIdle():无窗口消息需处理时,被窗口框架调用。无窗口消息需处理时,被窗口框架调用。ExitInstance():退出程序是,被调用。退出程序是,被调用。24Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 5.CFrameWnd5.CFrameWnd类类 CFrameWndCFrameWnd类类是是CWndCWnd类类的的派派生生类类。它它是是所所有有其其他他框架窗口框架窗

24、口类的类的基类基类,主要用来管理一个窗口。,主要用来管理一个窗口。 CFrameWndCFrameWnd类类的的对对象象是是一一个个框框架架窗窗口口,包包括括边边框框、标标题题栏栏、菜菜单单、最最大大化化按按钮钮、最最小小化化按按钮钮和和一一个个激激活活的的视视图图。CFrameWndCFrameWnd类类支支持持单单文文档档界界面面,对对于于多多文文档档界界 面面 , 使使 用用 它它 的的 两两 个个 派派 生生 类类 CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类类用用于于MDIMD

25、I的的主主窗窗口口,CMDIChildWndCMDIChildWnd类用于类用于MDIMDI的的子窗口子窗口。 4.CWnd4.CWnd类类 窗窗口口类类CWndCWnd提提供供了了MFCMFC中中所所有有窗窗口口类类的的基基本本功功能能。从从CWndCWnd派派生生的的类类可可以以拥拥有有自自己己的的窗窗口口,并并对它进行控制。对它进行控制。 25Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 6.CView6.CView类类 视视图图类类CViewCView是是CWndCWnd类类的的子子类类。视视图图类类及及其其派派生类生类用于管

26、理框架窗口的客户区用于管理框架窗口的客户区。7.CDocument7.CDocument类类 文文档档类类CDocumentCDocument负负责责装装载载和和维维护护文文档档。文文档档包包括括应应用用程程序序的的工工作作成成果果或或环环境境设设置置数数据据等等,可可以是程序需要保存的任何内容。以是程序需要保存的任何内容。 26Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 一一一一个个个个MFCMFCMFCMFC应应应应用用用用程程程程序序序序并并并并不不不不直直直直接接接接操操操操作作作作上上上上述述述述类类类类,而而而而是是是是

27、以以以以上上上上述述述述类类类类为为为为基类基类基类基类派生新的类派生新的类派生新的类派生新的类,从而构建,从而构建WindowsWindows应用程序的基本框架。应用程序的基本框架。 例如,应用程序例如,应用程序Li2_1Li2_1中的类与这些基类的派生关系中的类与这些基类的派生关系: : 8.CDocTemplate类类 文档模板文档模板类类定义了文档模板的基本功能,它是一个抽象类,定义了文档模板的基本功能,它是一个抽象类,不能直接使用,只能用其派生类。不能直接使用,只能用其派生类。 27Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基

28、础 练习28Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 1.1.应用程序向导生成的文件应用程序向导生成的文件 下下面面以以例例2.12.1中中创创建建的的应应用用程程序序Li2_1Li2_1为为例例,介介绍绍MFC MFC AppWizardexeAppWizardexe 向导所生成的各类文件及功能。向导所生成的各类文件及功能。 2.2.3MFC应用程序分析应用程序分析29Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (1)头文件与实现文件头文件与实现文件MainFrm.h

29、和和MainFrm.cpp:定定义义和和实实现现窗窗口口框框架架类类CMainFrame。CLi2_1Doc.h和和CLi2_1Doc.cpp:定定义义和和实实现现文文档档类类CLi2_1Doc。CLi2_1View.h和和CLi2_1View.cpp:定定义义和和实实现现视视图类图类CLi2_1View。CLi2_1.h和和CLi2_1.cpp:定定义义和和实实现现应应用用程程序序类类CLi2_1App。Resource.h:定定义义工工程程中中所所有有资资源源标标识识符符,给给资资源源ID分配一个整数值。分配一个整数值。StdAfx.h和和StdAfx.cpp:用用于于建建立立一一个个预预

30、编编译译的的头头文文件件CLi2_1.PCH和和一一个个预预定定义义的的类类型型文文件件StdAfx.obj。加速编译过程,一般不修改。加速编译过程,一般不修改。30Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (2)资源文件资源文件Li2_1.rc和和Li2_1.rc2:Li2_1.rc文文件件是是程程序序所所使使用用的的所有所有Windows资源资源的列表。的列表。Li2_1.ico:应用程序的图标所使用的:应用程序的图标所使用的图标图标文件。文件。Li2_1Doc.ico:应应用用程程序序的的文文档档图图标标文文件件。文文档档图

31、图标一般显示在多文档程序界面上。标一般显示在多文档程序界面上。Toolbar.bmp:工具栏按钮的:工具栏按钮的位图位图文件。文件。31Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (3)项目工作区文件和工程文件项目工作区文件和工程文件Li2_1.dsw:保保存存当当前前工工作作区区所所包包含含的的工工程程的的信信息。息。Li2_1.dsp:包包含含当当前前工工程程的的设设置置、工工程程中中的的文文件等信息。件等信息。32Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (4)其

32、他文件其他文件Li2_1.clw: 该该 文文 件件 是是 类类 信信 息息 文文 件件 。 它它 保保 存存 了了ClassWizard编编辑辑现现有有类类或或增增加加新新类类时时需需使使用用的的类类信信息息,同同时时还还保保存存了了创创建建、编编辑辑消消息息映映射射和和成成员员函函数数所所需的信息。需的信息。ReadMe.txt:该该文文件件是是工工程程自自述述文文件件。主主要要介介绍绍所所创创建建文文件件的的内内容容和和功功能能,以以及及添添加加用用户户代代码码、更更改改使使用语言的方法。用语言的方法。33Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFC

33、MFC编程基础编程基础 2.应用程序的运行机制应用程序的运行机制程序开始初始化全局对象theAppCWinApp类构造函数CHelloApp类构造函数AfxWinMain()函数pApp- InitInstance()调 用 ProcessShellCommand()创建主框架窗口对象、视图对象、文档对象,创建主框架窗口和视图窗口并显示CWinThread:Run()WM_QUIT消 息循 环结束pApp- Run()CHelloApp theAppCWinApp *pApp=AfxGetApp();WinMainpApp-InitApplication();ExitInstance()34V

34、isual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.2.应用程序的执行过程应用程序的执行过程 启动启动: :创建创建应用程序应用程序对象对象theApptheApp、调用应用程序类的、调用应用程序类的构造构造函数函数初始化对象初始化对象theApptheApp。 应用程序框架调用应用程序框架调用MFCMFC提供的提供的AfxWinMainAfxWinMain( )( )主函数主函数。AfxWinMainAfxWinMain( )( )主函数,首先通过调用全局函数主函数,首先通过调用全局函数AfxGetAppAfxGetApp( )( )来

35、获取来获取theApptheApp的的指针指针pApppApp;然后通过该然后通过该指针调用指针调用theApptheApp的成员函数的成员函数InitInstanceInitInstance( )( )来初始化应用程序。来初始化应用程序。35Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 在应用程序的初始化过程中,同时还构造了在应用程序的初始化过程中,同时还构造了文文档模板,产生最初的文档、视图和主框架窗口,并档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。生成工具栏和状态栏。当当InitInstanceInitIns

36、tance( )( )函数执行完毕后,函数执行完毕后,WinMainWinMain( )( )函数将调用成员函数函数将调用成员函数Run( )Run( ),进入,进入消息处理消息处理循环循环;函数函数Run( )Run( )收到收到WM_QUITWM_QUIT消息消息。MFCMFC首先调用首先调用CWinAppCWinApp类的成员函数类的成员函数ExitInstanceExitInstance( )( );然后调用静态对象的析构函数;然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。36Visual C+程序设计与应用教程2024/8/2任务

37、单元二任务单元二 :MFCMFC编程基础编程基础 分析例分析例2.12.1中的消息对话框中的消息对话框 一种简单的对话框,用户可以直接调用消息对话框函一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。数来使用它,而不需要自己创建。Visual C+Visual C+提供提供三个消息三个消息对话框函数对话框函数,它们的原型为:,它们的原型为:intAfxMessageBox(LPCTSTRlpText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,

38、UINTnType);intCWnd:MessageBox(LPCTSTRlpText,LPCTSTRlpCaption=NULL,UINTnType=MB_OK);只能用于控件、对话框、窗只能用于控件、对话框、窗口等一些类中。口等一些类中。可以用在可以用在程序的任程序的任意地方意地方37Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 38Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 39Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编

39、程基础编程基础 2.2.4 文档文档/视图结构视图结构 文档视图体系结构是文档视图体系结构是MFCMFC应用程序框架结构的应用程序框架结构的基石,它定义了基石,它定义了一种程序结构一种程序结构,这种结构利用,这种结构利用文档文档对对象保存应用程序的数据,依靠象保存应用程序的数据,依靠视图视图对象控制视图显示对象控制视图显示数据,数据,文档与视图的关系文档与视图的关系是是一对多一对多的关系,也就是说,的关系,也就是说,文文档中的数据可以以不同的方式显示档中的数据可以以不同的方式显示档中的数据可以以不同的方式显示档中的数据可以以不同的方式显示。40Visual C+程序设计与应用教程2024/8/

40、2任务单元二任务单元二 :MFCMFC编程基础编程基础 41Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.3消息映射与消息处理消息映射与消息处理 WindowsWindows消消息息主主要要有有3 3种种类类型型: :标标准准WindowsWindows消消息息、控件消息控件消息和和命令消息命令消息。1 1标准标准WindowsWindows消息消息除除WM_COMMANDWM_COMMAND以以外外,所所有有以以“WM_”WM_”为为前前缀缀的的消消息都是标准息都是标准WindowsWindows消息消息; ;由由窗口类窗口类或

41、或视图类视图类处理处理; ;都都有有默默认认的的处处理理函函数数,它它们们在在CWndCWnd类类中中进进行行了了预预定义,默认前缀定义,默认前缀OnOn。如。如: :afx_msgafx_msg void void OnCharOnChar();();2.3.1消息的类别及其描述消息的类别及其描述消息映射:把消息映射:把消息处理函数消息处理函数与其要处理的与其要处理的消息消息连起来连起来42Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 标准的标准的WindowsWindows消息又分为消息又分为3 3类:类:键盘消息、鼠标消息和窗口

42、消息键盘消息、鼠标消息和窗口消息。(1)(1)键盘消息键盘消息 键键盘盘消消息息与与键键盘盘某某个个键键的的动动作作相相关关联联。常常见见的的键键盘盘消息有以下几种。消息有以下几种。WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:按按下下、释释放放非非系系统统键键产产生生的的消息。消息。WM_CHARWM_CHAR:输入输入非系统字符时产生的消息。非系统字符时产生的消息。如如:afx_msg void OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);43Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二

43、:MFCMFC编程基础编程基础 (2) (2) 鼠标消息鼠标消息 鼠鼠标标消消息息涉涉及及到到鼠鼠标标的的单单击击、双双击击、拖拖动动等等。常常用用的的鼠标消息有以下几种。鼠标消息有以下几种。 WM_MOUSEMOVEWM_MOUSEMOVE:鼠标:鼠标移动移动时产生的消息。时产生的消息。 WM_RBUTTONDOWNWM_RBUTTONDOWN:鼠标:鼠标右键右键按下时产生的消息。按下时产生的消息。 WM_LBUTTONDOWNWM_LBUTTONDOWN:鼠标:鼠标左键左键按下时产生的消息。按下时产生的消息。 WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠标:

44、鼠标双击双击时产生的消息。时产生的消息。如如:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);44Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 (3) (3) 窗口消息窗口消息 窗窗口口消消息息一一般般与与创创建建窗窗口口、绘绘制制窗窗口口、移移动动窗窗口口和和销毁窗口销毁窗口等动作有关。等动作有关。 在在MFCMFC应应用用程程序序中中,窗窗口口消消息息是是由由视视图图类类、窗窗口口类类及它们的及它们的派生类派生类处理的。处理的。常见的窗口消息:常见的窗口消息:WM_PAIN

45、TWM_PAINT: :客客户户区区有有移移动动或或显显示示事事件件、窗窗口口大大小小改变事件等发送改变事件等发送WM_TIMERWM_TIMER: :每当计时器被触发时发送每当计时器被触发时发送45Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.2.控件消息控件消息 控控件件消消息息是是指指控控件件或或其其他他子子窗窗口口向向父父窗窗口口发发送送的的WM_COMMANDWM_COMMAND消息。消息。 与与其其他他标标准准的的WindowsWindows消消息息一一样样,控控件件消消息息也也应应该该在在视视图图类类、窗窗口口类类中

46、中进进行行处处理理。但但是是,如如果果用用户户单单击击按按钮钮控控件件时时,发发出出的的控控件件通通知知消消息息BN_CLICKEDBN_CLICKED将将作作为命令消息来处理。为命令消息来处理。例例如如:用用户户向向编编辑辑框框中中的的文文本本进进行行修修改改,编编辑辑框框将将发发送送给给父父窗窗口口一一条条含含控控件件通通知知码码的的WM_COMMAND消消息。息。46Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 3.3.命令消息命令消息 命命令令消消息息是是由由菜菜单单项项、工工具具栏栏按按钮钮、快快捷捷键键等等用用户界面对象发

47、出的户界面对象发出的WM_COMMANDWM_COMMAND消息。消息。 命命令令消消息息与与其其他他消消息息不不同同,它它可可被被更更广广泛泛的的对对象象如如文文档档、文文档档模模板板、应应用用程程序序对对象象、窗窗口口和和视视图图等等处处理。理。47Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.3.2MFC消息映射机制消息映射机制 MFCMFC采用采用消息映射消息映射来处理消息;来处理消息; 消消息息映映射射机机制制包包括括一一组组消消息息映映射射宏宏,用用于于把把一一个个WindowsWindows消息消息和和其消息处理函数

48、其消息处理函数联系起来。联系起来。 所所有有从从CCmdTargetCCmdTarget类类派派生生出出来来的的类类都都能能够够拥拥有有自自己己的消息映射。的消息映射。 与与MFCMFC消息映射机制有关的宏有以下消息映射机制有关的宏有以下3 3个:个:DECLAREDECLARE_MESSAGE_MAP( )_MESSAGE_MAP( )BEGINBEGIN_MESSAGE_MAP(MyClass_MESSAGE_MAP(MyClass, , MybaseClassMybaseClass) )ENDEND_MESSAGE_MAP( )_MESSAGE_MAP( )48Visual C+程序设计

49、与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 为了使用消息映射宏:为了使用消息映射宏:u首首先先在在类类定定义义的的结结尾尾用用DECLARE_MESSAGE_MAP( DECLARE_MESSAGE_MAP( ) )宏宏来来声声明明使使用用消消息息映映射射,该该宏宏表表示示在在为为各各个个处处理理函函数数所所写写的的类类声声明明之之后后存存在在消消息息映映射射条条目目,这这些些函函数数是该类的成员函数。是该类的成员函数。u然然后后在在类类的的实实现现源源文文件件中中用用BEGIN_MESSAGE_MAP( BEGIN_MESSAGE_MAP( ) )和和EN

50、D_MESSAGE_MAP( )END_MESSAGE_MAP( )宏来宏来定义定义消息映射消息映射。49Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 为了在一个处理消息的类中加入消息映射表,要在该类的类声明中(一般在头文件中)添加下面的宏调用。DECLEAR_MESSAGE_MAP( )这条宏语句一般放在类定义的最后。例如,有一个 CMyClass 类,并想给类加上消息映射,则必须先在类定义中加入 DECLEAR_MESSAGE_MAP( )函数。class CMyClass:public CObjectDECLEAR_MESSAG

51、E_MAP()1) 声明消息映射50Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 MFC应用程序应用程序MESSAG_MAP消息映射的形式如下:消息映射的形式如下:BEGIN_MESSAGE_MAP(MyClass,MybaseClass)/AFX_MSG_MAP(MyClass)/ClassWizard维护消息映射宏的标记维护消息映射宏的标记ON_./MFC预定义消息映射宏预定义消息映射宏ON_MESSAGE(message,memberFun)/用户自定义消息映射宏用户自定义消息映射宏/AFX_MSG_MAPEND_MESSAGE

52、_MAP()其中,其中,MyClass是拥有消息映射的是拥有消息映射的派生类名派生类名,MybaseClass是其是其基类名基类名。51Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2) 实现消息映射实现消息映射消息映射提供了与消息映射提供了与 C+中的虚函数类似的功能,消息处理方法可以位于派生类中的虚函数类似的功能,消息处理方法可以位于派生类层次的任何地方。层次的任何地方。MFC 使用消息映射结构去搜索所有使用消息映射结构去搜索所有派生类派生类,直到它找到,直到它找到给定的消息处理函数为止,在搜索过程中会沿着给定的消息处理函数为止,

53、在搜索过程中会沿着 MFC 类层次上溯至类层次上溯至 CCmdTarget 类。类。消息映射机制消息映射机制是一种比虚函数更快捷更高效的方法。是一种比虚函数更快捷更高效的方法。实现类的消息映射时需要在类的实现类的消息映射时需要在类的实现文件实现文件(.cpp)中加上消息映射表中加上消息映射表,如下面,如下面的程序片段。的程序片段。BEGIN_MESSAGE_MAP(CMouseMoveView, CView)/AFX_MSG_MAP(CMouseMoveView)ON_WM_MOUSEMOVE()/AFX_MSG_MAP/标准打印命令标准打印命令ON_COMMAND(ID_FILE_PRINT

54、, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()52Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 【例例2.22.2】 利利用用ClassWizardClassWizard为为例例2.12.1中中生生成成的的应应用用程程序序Li2_1Li2_1添添加加鼠鼠标标右右键键按按下下消消息息,即即WM

55、_RBUTTONDOWNWM_RBUTTONDOWN消消息息,并并为为FileFile菜菜单单下下的的OpenOpen菜菜单单项项添添加加消消息息处处理理函函数数,分分析析ClassWizardClassWizard类向导所进行的消息映射。类向导所进行的消息映射。P35P3553Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 练习54Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.3.3自定义消息处理自定义消息处理自自定定义义消消息息处处理理:定定义义消消息息名名、分分配配I

56、DID值值及及完完成成消消息息映射。映射。WindowsWindows将所有的消息值分为将所有的消息值分为4 4段:段:0x00000x00000x03FF0x03FF段段: :用于用于WindowsWindows系统消息系统消息0x04000x04000x7FFF0x7FFF段段: :用于用户用于用户自定义的窗口消息自定义的窗口消息0x80000x80000xBFFF0xBFFF段段: :为为WindowsWindows保留值保留值0xC0000xC0000xFFFF0xFFFF段段: :用于应用程序的用于应用程序的字符串消息字符串消息。55Visual C+程序设计与应用教程2024/8/

57、2任务单元二任务单元二 :MFCMFC编程基础编程基础 常常量量WM_USER(WM_USER(为为0x0400)0x0400)与与第第一一个个自自定定义义消消息息值值相相对对应应,用用户户必必须须为为自自己己的的消消息息定定义义相相对对于于WM_USERWM_USER的的偏偏移移值值,利利用用#define#define语句直接定义自己的消息,如下所示:语句直接定义自己的消息,如下所示: #define WM_USER WM_USER+3 / 自定义消息自定义消息WM_USER 也也可可以以调调用用窗窗口口消消息息注注册册函函数数RegisterWindowMessageRegisterWi

58、ndowMessage( ( ) )来来定定义义一一个个WindowsWindows消消息息,由由系系统统分分配配消消息息一一个个整整数数值值。该该函函数原型为:数原型为: UINT RegisterWindowMessage(LPCTSTR lpString); 其其中中参参数数lpStringlpString是是要要定定义义的的消消息息名名,调调用用成成功功后后将将返回该消息的返回该消息的IDID值。值。56Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 【例例2.32.3】 编编写写一一个个自自定定义义消消息息应应用用程程序序,并

59、并添添加加WM_RBUTTONDOWNWM_RBUTTONDOWN消消息息。当当程程序序运运行行时时,用用户户在在视视图图窗窗口口中中单单击击鼠鼠标标右右键键,则则调调用用自自定定义义消消息息处处理理函函数数,输输出出文文本本“自定义消息自定义消息WM_MYMESSAGEWM_MYMESSAGE的处理函数被调用!的处理函数被调用!”。P37P37#define WM_MYMESSAGE WM_USER+1 /自定义消息afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);ON_MESSAGE(WM_MYMESSAGE,OnMyMess

60、age)/自定义消息映射宏LRESULT CLi2_3View:OnMyMessage(WPARAM wParam,LPARAM lParam)MessageBox(自定义消息WM_MYMESSAGE的处理函数被调用!);return 0;SendMessage(WM_MYMESSAGE); 57Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.4 2.4 程序调试程序调试 程程序序调调试试分分为为源源程程序序语语法法错错误误的的修修改改和和程程序序逻逻辑辑设设计计错错误误的的修修改改两两个个阶阶段段,编编译译器器只只能能找找出出源源

61、程程序序的的语语法法错错误误,程程序序的的逻逻辑辑设设计计错错误误只只能能靠靠程序员利用程序员利用调试工具调试工具来手工检查和修改。来手工检查和修改。58Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.4.1 2.4.1 查找源程序中的语法错误查找源程序中的语法错误 语法错误分为语法错误分为: :一一般般错错误误(error):(error):出出现现该该错错误误时时将将不不会会产产生生可可执执行行程序程序; ;警警告告错错误误(warning):(warning):出出现现该该错错误误时时能能够够生生成成可可执执行行程程序序,但但

62、程程序序运运行行时时可可能能发发生生错错误误,严严重重的的warningwarning错误还会引起死机现象。错误还会引起死机现象。 59Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 如果程序有语法错误,则在执行如果程序有语法错误,则在执行编译、链接编译、链接命令命令时,时,Visual C+Visual C+编译器将在输出窗口中给出编译器将在输出窗口中给出语法错误语法错误提示信息,但提示信息,但链接错误链接错误提示信息提示信息不能给不能给出错误发生的出错误发生的具体位置。具体位置。 在在输输出出窗窗口口中中双双击击错错误误提提示示信信

63、息息或或按按F4F4键键可可以以返返回回到到源源程程序序编编辑辑窗窗口口,并并通通过过一一个个箭箭头头符符号号定定位位到到产产生错误的语句。生错误的语句。说说明明:编编译译器器的的错错误误提提示示可可能能不不十十分分准准确确,一一处处错错误误可可能能引引发发多多个个错错误误提提示示。所所以以修修改改一一个个错错误误最最好好马马上上编译!编译!60Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.4.2 2.4.2 调试器调试器 为为了了查查找找和和修修改改程程序序中中的的逻逻辑辑设设计计错错误误,Visual Visual C+ ID

64、EC+ IDE提供了重要的调试工具提供了重要的调试工具DebugDebug。 单单击击Build Build | | Start Start DebugDebug菜菜单单中中的的菜菜单单项项,可可以以启动启动DebugDebug。61Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 Start DebugStart Debug子菜单中有子菜单中有GoGo、Step IntoStep Into、Run To CursorRun To Cursor及及Attach to ProcessAttach to Process菜单项菜单项开始或继续调

65、试程序,到开始或继续调试程序,到某个断点、程序的结束或某个断点、程序的结束或需要用户输入的地方停止需要用户输入的地方停止 程序执行到当前光标处,程序执行到当前光标处,相当于在光标处临时相当于在光标处临时设设置了一个断点置了一个断点单步执行单步执行程序的每程序的每一个指令,能进入一个指令,能进入被调用的函数内部被调用的函数内部将调试器与一将调试器与一个正在运行的个正在运行的进程相连接进程相连接62Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 调试过程开始后,调试过程开始后,DebugDebug主菜单取代主菜单取代BuildBuild主主

66、菜单出现在菜单栏中,同时出现一个可停靠的调菜单出现在菜单栏中,同时出现一个可停靠的调试工具栏和一些调试窗口。试工具栏和一些调试窗口。 63Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 Auto:显示当前语句或前一语句中变量的值或函数返回值。Locals:显示当前函数局部变量的名称、值与类型。this:以树型方式显示当前类对象的所有数据成员。Variable窗口Watch窗口:观察与修改变量或表达式的值64Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 即使源程序没有语法错误,但

67、最后生成的可执行程序也即使源程序没有语法错误,但最后生成的可执行程序也没有像程序设计要求的那样运行,这类程序设计上的错误被没有像程序设计要求的那样运行,这类程序设计上的错误被称为称为逻辑设计错误逻辑设计错误或缺陷或缺陷(bug)(bug)。 跟踪调试程序是查找此类逻辑设计错误方法中跟踪调试程序是查找此类逻辑设计错误方法中最常采用最常采用的动态方法。的动态方法。跟踪调试的基本原理跟踪调试的基本原理就是在程序运行过程的某就是在程序运行过程的某一阶段观测程序的状态。而在一般情况下程序是连续运行的,一阶段观测程序的状态。而在一般情况下程序是连续运行的,所以我们必须使程序在某一点停下来。所以我们必须使程

68、序在某一点停下来。 2.4.3 2.4.3 跟踪调试程序跟踪调试程序 65Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 选选择择EditEdit菜菜单单下下的的BreakpointsBreakpoints菜菜单单项项,显显示示BreakpointsBreakpoints对话框。对话框。 1.1.设置断点设置断点 设置断点的设置断点的3 3种方式:种方式:u按位置:按位置:无条件断点无条件断点u按表达式的值按表达式的值u按窗口消息按窗口消息66Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基

69、础编程基础 2.2.控制程序运行控制程序运行 Step OverStep Over:运行:运行当前箭头指向当前箭头指向的代码的代码( (只运行只运行一条代码一条代码) )。 Step Step IntoInto:如如果果当当前前箭箭头头所所指指的的代代码码是是一一个个函函数数的调用,则用的调用,则用Step IntoStep Into进入该函数并进行进入该函数并进行单步单步执行执行。 Step Step OutOut:如如果果当当前前箭箭头头所所指指向向的的代代码码是是在在某某一一函函数内部,用它数内部,用它可使程序运行至函数可使程序运行至函数返回处返回处。Run to CursorRun t

70、o Cursor:使程序运行至使程序运行至光标光标所指的代码处所指的代码处。 67Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 3.3.观察数据变化观察数据变化 在在调调试试过过程程中中,可可以以通通过过WatchWatch和和VariablesVariables窗窗口查看当前变量的值。口查看当前变量的值。F9:设置断点F5:启动调试器F10:单步跟踪执行68Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 【例例2.42.4】编编写写一一个个SDISDI单单文文档档应应用用程程

71、序序Li2_4Li2_4,求求2 21010中偶数的和,并在视图中输出计算结果。中偶数的和,并在视图中输出计算结果。P41P41void CLi2_4View:OnDraw(CDC* pDC)CLi2_4Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereint num5=2,4,6,8,10; int sum=0;for(int i=0;iTextOut(0,0,210中偶数的和是:+strSum);/输出结果69Visual C+程序设计与应用教程2024/8/2任务单

72、元二任务单元二 :MFCMFC编程基础编程基础 2.4.4MFC调试宏P43:自学(了解)70Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 2.5 2.5 应用实例应用实例 编编写写一一个个单单文文档档应应用用程程序序Sy2Sy2,程程序序运运行行后后,首首先先在在视视图图窗窗口口中中输输入入文文本本,然然后后通通过过键键盘盘上上的的光光标标键键控控制制该该文文本本向向左左、向向右右、向向上上和和向向下下4 4个个方方向向移动。移动。P44 P44 71Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFC

73、MFC编程基础编程基础 CSy2View:CSy2View()x=50;y=50;m_string.Empty();public:int x,y;CString m_string;void CSy2View:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) m_string+=nChar;Invalidate();CView:OnChar(nChar, nRepCnt, nFlags);72Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 void CSy2View:OnKeyDown(UINT

74、nChar, UINT nRepCnt, UINT nFlags) switch(nChar)case VK_LEFT:x-;break;case VK_RIGHT:x+;break;case VK_UP:y-;break;case VK_DOWN:y+; Invalidate();CView:OnKeyDown(nChar, nRepCnt, nFlags);void CSy2View:OnDraw(CDC* pDC)CSy2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC-TextOut(x,y,m_string);73Visual C+程序设计与应用教程2024/8/2任务单元二任务单元二 :MFCMFC编程基础编程基础 练习74

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号