VS2010之MFC学习入门到精通教学教材.doc

上传人:小** 文档编号:630506 上传时间:2019-04-22 格式:DOC 页数:307 大小:598.41KB
返回 下载 相关 举报
VS2010之MFC学习入门到精通教学教材.doc_第1页
第1页 / 共307页
VS2010之MFC学习入门到精通教学教材.doc_第2页
第2页 / 共307页
点击查看更多>>
资源描述

《VS2010之MFC学习入门到精通教学教材.doc》由会员分享,可在线阅读,更多相关《VS2010之MFC学习入门到精通教学教材.doc(307页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-_VS2010/MFC 编程入门教程之目录编程入门教程之目录第一部分:第一部分:VS2010/MFC 开发环境开发环境 VS2010/MFC 编程入门之前言 VS2010/MFC 编程入门之一(VS2010 与 MSDN 安装过程图解)第二部分:第二部分:VS2010/MFC 应用程序框架应用程序框架 VS2010/MFC 编程入门之二(利用 MFC 向导生成单文档应用程序框架)VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构)VS2010/MFC 编程入门之四(MFC 应用程序框架分析)VS2010/MFC 编程入门之五(MFC 消息映射机制概述)第三部分:对

2、话框第三部分:对话框VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC 编程入门之七(对话框:为对话框添加控件)VS2010/MFC 编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC 编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC 编程入门之十(对话框:设置对话框控件的 Tab 顺序)VS2010/MFC 编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC 编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC 编程入门之十三(对话框:属性页对话框及相关类的介绍)VS201

3、0/MFC 编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC 编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC 编程入门之十六(对话框:消息对话框)VS2010/MFC 编程入门之十七(对话框:文件对话框)VS2010/MFC 编程入门之十八(对话框:字体对话框)VS2010/MFC 编程入门之十九(对话框:颜色对话框)第四部分:常用控件第四部分:常用控件VS2010/MFC 编程入门之二十(常用控件:静态文本框)VS2010/MFC 编程入门之二十一(常用控件:编辑框 Edit Control)VS2010/MFC 编程入门之二十二(常用控件:按

4、钮控件 Button、Radio Button 和 Check Box)VS2010/MFC 编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC 编程入门之二十四(常用控件:列表框控件 ListBox)VS2010/MFC 编程入门之二十五(常用控件:组合框控件 Combo Box)VS2010/MFC 编程入门之二十六(常用控件:滚动条控件 Scroll Bar)VS2010/MFC 编程入门之二十七(常用控件:图片控件 Picture Control)VS2010/MFC 编程入门之二十八(常用控件:列表视图控件 List Control 上)VS2010/MFC 编程入

5、门之二十九(常用控件:列表视图控件 List Control 下)VS2010/MFC 编程入门之三十(常用控件:树形控件 Tree Control 上)VS2010/MFC 编程入门之三十一(常用控件:树形控件 Tree Control 下)VS2010/MFC 编程入门之三十二(常用控件:标签控件 Tab Control 上)-_VS2010/MFC 编程入门之三十三(常用控件:标签控件 Tab Control 下)第五部分:菜单、工具栏与状态栏第五部分:菜单、工具栏与状态栏VS2010/MFC 编程入门之三十四(菜单:VS2010 菜单资源详解)VS2010/MFC 编程入门之三十五(菜

6、单:菜单及 CMenu 类的使用)VS2010/MFC 编程入门之三十六(工具栏:工具栏资源及 CToolBar 类)VS2010/MFC 编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC 编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架第六部分:文档、视图和框架VS2010/MFC 编程入门之三十九(文档、视图和框架:概述)VS2010/MFC 编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC 编程入门之四十一(文档、视图和框架:分割窗口)第七部分:第七部分:MFC 常用类常用类VS2010/MFC 编程入门之四十二(MFC 常用

7、类:CString 类)VS2010/MFC 编程入门之四十三(MFC 常用类:CTime 类和 CTimeSpan 类)VS2010/MFC 编程入门之四十四(MFC 常用类:定时器 Timer)VS2010/MFC 编程入门之四十五(MFC 常用类:CFile 文件操作类)VS2010/MFC 编程入门之四十六(MFC 常用类:MFC 异常处理)第八部分:字体和文本输出第八部分:字体和文本输出VS2010/MFC 编程入门之四十七(字体和文本输出:CFont 字体类)VS2010/MFC 编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像第九部分:图形图像VS2010/MFC

8、编程入门之四十九(图形图像:CDC 类及其屏幕绘图函数)VS2010/MFC 编程入门之五十(图形图像:GDI 对象之画笔 CPen)VS2010/MFC 编程入门之五十一(图形图像:GDI 对象之画刷 CBrush)第十部分:第十部分:Ribbon 界面开发界面开发VS2010/MFC 编程入门之五十二(Ribbon 界面开发:创建 Ribbon 样式的应用程序框架)VS2010/MFC 编程入门之五十三(Ribbon 界面开发:为 Ribbon Bar 添加控件)VS2010/MFC 编程入门之五十四(Ribbon 界面开发:使用更多控件并为控件添加消息处理 函数)-_VS2010/MFC

9、 编程入门之前言鸡啄米的 C+编程入门系列给大家讲了 C+的编程入门知识,大家对 C+语言在语法和设计思想上应该有了一定的了解了。但是教程中讲的例子只是一个个简单的例程,并没有可视化窗口。鸡啄米在这套 VS2010/MFC 编程入门教程中将会给大家讲解怎样使用 VS2010 进行可视化编程,也就是基于窗口的程序。C+编程入门系列主要偏重于理论方面的知识,目的是让大家打好底子,练好内功,在使用 VC+编程时不至于丈二和尚摸不着头脑。本套教程也会涉及到 VC+的原理性的东西,同样更重视实用性,让大家学完本套教程以后,基本的界面程序都能很容易编写出来。VC+简介简介VC+全称是 Visual C+,

10、是由微软提供的 C+开发工具,它与 C+的根本区别就在于,C+是语言,而 VC+是用 C+语言编写程序的工具平台。VC+不仅是一个编译器更是一个集成开发环境,包括编辑器、调试器和编译器等,一般它包含在 Visual Studio 中。Visual Studio 包含了 VB、VC+、C#等编译环境。当然我们在使用 VC+ 6.0 的时候为了轻便,总是只单独安装 VC+ 6.0。但自微软 2002 年发布 Visual Studio.NET 以来,微软建立了在.NET 框架上的代码托管机制,一个项目可以支持多种语言开发的组件,VC+同样被扩展为支持代码托管机制的开发环境,所以.NET Frame

11、work 是必须的,也就不再有 VC+的独立安装程序,不过可以在安装 Visual Studio 时只选择 VC+进行安装。VC+版本的选择版本的选择:VS2010因为 VC+ 6.0 以后的版本不再有独立的安装程序,所以鸡啄米在教程中将不会称 VC+ 6.0 以后的版本为 VC+ 7.0 等等,而是用 VC+所属的 Visual Studio 的版本名称代替,比如 VS2003。近些年 VC+主要的版本包括:VC+ 6.0、VS2003、VS2005、VS2008 和 VS2010。VC+ 6.0 占用的系统资源比较少,打开工程、编译运行都比较快,所以赢得很多软件开发者的青睐。但因为它先于

12、C+标准推出,所以对 C+标准的支持不太好。举个例子-_:for(int i=0; i“Microsoft Visual Studio 2010”-“Visual Studio Tools”下选择“Manage Help Settings - ENU”:-_弹出对话框:-_可以将帮助库存在默认路径,也可以修改存放路径。鸡啄米使用默认路径,点“OK”出现:选择“Install Content From Disk”后弹出对话框选择帮助所在文件,这时需要在加载了 VS2010 的虚拟光驱中找,选择图中所示路径:点 OK 后出现如下对话框,可以点“Add”选择要添加的帮助库,鸡啄米全部添加了。-_点“

13、Update”进行安装,等待其完成就可以了。使用 MSDN 时点击开始菜单的“所有程序”-“Microsoft Visual Studio 2010”-“Microsoft Visual Studio 2010 Documentation”即可。到此 VS2010 和 MSDN 的安装过程就结束了。以后就可以正式使用 VS2010 进行软件开发了。至于 VS2010 的使用方法在鸡啄米的 C+编程入门系列中已经介绍过,大家可以看看。-_VS2010/MFC 编程入门之二(利用 MFC 向导生成单文档应用程序框架)解决方案与工程解决方案与工程鸡啄米在 VS2010 的使用介绍中已经讲了解决方案与

14、工程的概念,这里再重提一下。每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在 VS2010 中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合。VS2010提供了一个 Solution Explorer 解决方案浏览器视图,可以显示当前解决方案的内容,当新建一个工程时可以选择新建一个解决方案还是加入当前解决方案。下图左侧面板中正在显示的视图就是 Solution Explorer,视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。在

15、应用程序向导生成应用程序后,VS2010 会在用户设置的路径下,以解决方案名为名称建立一个目录,里面存放自动生成的文件。使用使用 VS2010 应用程序向导生成单文档应用程序框架应用程序向导生成单文档应用程序框架-_鸡啄米这里简略演示下怎样生成单文档应用程序框架,让大家先有个直观的了解,有不理解的地方可以留着以后回来再看。下面按照操作步骤一步步讲解:1.点菜单栏 File-New-Project,弹出 New Project 对话框,我们可以选择工程类型。如果安装完 VS2010 以后第一启动时已经设置为 VC+,则 Installed Templates-Visual C+项会默认展开,而如

16、果没有设置 VC+,则可以展开到 Installed Templates-Other Languages-Visual C+项。因为我们要生成的是 MFC 程序,所以在“Visual C+”下选择“MFC”,对话框中间区域会出现三个选项:MFC ActiveX Control、MFC Application 和 MFC DLL。MFC ActiveX Control 用来生成 MFC ActiveX 控件程序。MFC Application 用来生成 MFC 应用程序。MFC DLL 用来生成 MFC 动态链接库程序。当然我们要选择 MFC Application。在对话框下部有 Name、L

17、ocation 和 Solution name 三个设置项。意义如下:Name-工程名,Location-解决方案路径,Solution name-解决方案名称。这里 Name 我们设为“HelloWorld”,Location 设置为“桌面”的路径,Solution name 默认和 Name 一样,当然可以修改为其他名字,这里我们不作修改,也使用“HelloWorld”。点“OK”按钮。2.这时会弹出“MFC Application Wizard”对话框,上部写有“Welcome to the MFC Application Wizard”,下面显示了当前工程的默认设置。第一条“Tabbe

18、d multiple document interface (MDI)”是说此工程是多文档应用程序。如果这时直接点下面的“Finish”按钮,可-_生成具有上面列出设置的多文档程序。但我们此例是要建立单文档应用程序,所以点“Next”按钮再继续设置吧。3.接下来弹出的对话框上部写有“Application Type”,当然是让选择应用程序类型,我们看到有四种类型:Single document(单文档) 、Multiple documents(多文档) 、Dialog based(基于对话框)和 Multiple top-level documents。我们选择 Single document

19、 类型,以生成一个单文档应用程序框架。单文档应用程序运行时是一个单窗口界面。此对话框的“Resource language”还提供语言的选择,这里默认选择英语。 “Project style”可选择工程风格,我们选择默认的“Visual Studio”风格。 “Use of MFC”有两个选项:Use MFC in a shared DLL(动态链接库方式使用 MFC)和 Use MFC in a static library(静态库方式使用 MFC) 。选择 Use MFC in a shared DLL 时 MFC 的类会以动态链接库的方式访问,所以我们的应用程序本身就会小些,但是发布应用

20、程序时必须同时添加必要的动态链接库,以便在没有安装 VS2010 的机子上能够正常运行程序。选择 Use MFC in a static library 时 MFC 的类会编译到可执行文件中,所以应用程序的可执行文件要比上种方式大,但可以单独发布,不需另加包含 MFC 类的库。这里我们使用默认的 Use MFC i-_n a shared DLL。点“Next”按钮。4.此时弹出上部写有“Compound Document Support”的对话框,可以通过它向应用程序加入 OLE 支持,指定 OLE 选项的复合文档类型。本例不需要 OLE 特性,使用默认值“None”。点“Next”按钮。5

21、.弹出的新对话框上部写有“Document Template Properties”。 “File extension”可以设置程序能处理的文件的扩展名。对话框其他选项还可以更改程序窗口的标题。我们都使用默认设置,点“Next”按钮。6.此时弹出的对话框主题是“Database Support”。用于设置数据库选项。此向导可以生成数据库应用程序需要的代码。它有四个选项:None:忽略所有的数据库支持;Header files only:只包含定义了数据库类的头文件,但不生成对应特定表的数据库类或视图类;Database view without file support:创建对应指定表的一个数

22、据库类和一个视图类,不附加标准文件支持;Database view with file support:创建对应指定表的一个数据库类和一个视图类,并附加标准文件支持。本例选择默认值“None”,不使用数据库特性。点“Next”按钮。7.这时弹出的对话框是关于“User Interface Features”,即用户界面特性。我们可以设置有无最大化按钮、最小化按钮、系统菜单和初始状态栏等。还可以选择使用菜单栏和工具栏生成简单的应用程序还是使用 ribbon。这里我们都选择默认设置。点“Next”进入下一步。8.此时弹出“高级特性”对话框。可以设置的高级特性包括有无打印和打印预览等。在“Numbe

23、r of files on recent file list”项可以设置在程序界面的文件菜单下面最近打开文件的个数。我们仍使用默认值。点“Next”按钮。9.弹出“生成类”对话框。在对话框上部的“生成类”列表框内,列出了将要生成的 4 个类:一个视图类(CHelloWorldView) 、一个应用类(CHelloWorldApp) 、一个文档类(CHelloWorldDoc)和一个主框架窗口类(CMainFrame) 。在对话框下面的几个编辑框中,可以修改默认的类名、类的头文件名和源文件名。对于视图类,还可以修改其基类名称,默认的基类是 CView,还有其他几个基类可以选择。这里我们还是使用默

24、认设置。点“Finish”按钮。-_应用程序向导最后为我们生成了应用程序框架,并在 Solution Explorer 中自动打开了解决方案(见上面第一张图) 。编译运行生成的程序编译运行生成的程序点菜单中的 Build-Build HelloWorld 编译程序,然后点 Debug-Start Without Debugging(快捷键 Ctrl+F5)运行程序,也可以直接点 Debug-Start Without Debugging,这时会弹出对话框提示是否编译,选择“Yes”,VS2010 将自动编译链接运行 HelloWorld程序。结果页面如下所示:终于看见界面了。鸡啄米在以后的教程

25、中会继续讲解各种界面和控件的使用方法。欢迎到鸡啄米博客交流,您的关注是我前进的动力。-_VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构)鸡啄米在上一讲中为大家演示了如何利用应用程序向导创建单文档应用程序框架。这一节将以上一讲中生成应用程序 HelloWorld 的文件结构为例,讲解 VS2010 应用程序工程中文件的组成结构。用应用程序向导生成框架程序后,我们可以在之前设置的 Location 下看到以解决方案名命名的文件夹,此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个 res 文件夹,创建工程时的选项不同,工程文

26、件夹下的文件可能也会有所不同。如果已经以 Debug 方式编译链接过程序,则会在解决方案文件夹下和工程子文件夹下各有一个名为“Debug”的文件夹,而如果是 Release 方式编译则会有名为“Release”的文件夹。这两种编译方式将产生两种不同版本的可执行程序:Debug 版本和版本和 Release 版本版本。Debug 版本的可执行文件中包含了用于调试的信息和代码,而 Release 版本则没有调试信息,不能进行调试,但可执行文件比较小。鸡啄米将所有文件分为鸡啄米将所有文件分为 6 个部分:解决方案相关文件、工程相关文件、应用程序头文个部分:解决方案相关文件、工程相关文件、应用程序头文

27、件和源文件、资源文件、预编译头文件和编译链接生成文件。件和源文件、资源文件、预编译头文件和编译链接生成文件。1.解决方案相关文件解决方案相关文件解决方案相关文件包括解决方案文件夹下的.sdf 文件、.sln 文件、.suo 文件和 ipch 文件夹。.sdf 文件和 ipch 目录一般占用空间比较大,几十兆甚至上百兆,与智能提示、错误提示、代码恢复和团队本地仓库等相关。如果你觉得不需要则可以设置不生成它们,方法是点击菜单栏 Tools-Options,弹出 Options 对话框,选择左侧面板中 Text Editor-C/C+-Advanced,右侧列表中第一项 Disable Databa

28、se 由 False 改为 True 就可以了,最后关闭VS2010 再删除.sdf 文件和 ipch 目录以后就不会再产生了。但关闭此选项以后也会有很多不便,例如写程序时的智能提示没有了。.sln 文件和.suo 文件为 MFC 自动生成的解决方案文件,它包含当前解决方案中的工程信息,存储解决方案的设置。-_2.工程相关文件工程相关文件工程相关文件包括工程文件夹下的.vcxproj 文件和.vcxproj.filters 文件。.vcxproj 文件是 MFC 生成的工程文件,它包含当前工程的设置和工程所包含的文件等信息。.vcxproj.filters 文件存放工程的虚拟目录信息,也就是在

29、解决方案浏览器中的目录结构信息。3.应用程序头文件和源文件应用程序头文件和源文件应用程序向导会根据应用程序的类型(单文档、多文档或基于对话框的程序)自动生成一些头文件和源文件,这些文件是工程的主体部分,用于实现主框架、文档、视图等。鸡啄米下面分别简单介绍下各个文件:HelloWorld.h:应用程序的主头文件。主要包含由 CWinAppEx 类派生的 CHelloWorldApp 类的声明,以及 CHelloWorldApp 类的全局对象 theApp 的声明。HelloWorld.cpp:应用程序的主源文件。主要包含 CHelloWorldApp 类的实现,CHelloWorldApp 类的

30、全局对象 theApp 的定义等。MainFrm.h 和 MainFrm.cpp:通过这两个文件从 CFrameWndEx 类派生出 CMainFrame 类,用于创建主框架、菜单栏、工具栏和状态栏等。HelloWorldDoc.h 和 HelloWorldDoc.cpp:这两个文件从 CDocument 类派生出文档类CHelloWorldDoc,包含一些用来初始化文档、串行化(保存和装入)文档和调试的成员函-_数。HelloWorldView.h 和 HelloWorldView.cpp:它们从 CView 类派生出名为 CHelloWorldView 的视图类,用来显示和打印文档数据,包

31、含了一些绘图和用于调试的成员函数。ClassView.h 和 ClassView.cpp:由 CDockablePane 类派生出 CClassView 类,用于实现应用程序界面左侧面板上的 Class View。FileView.h 和 FileView.cpp:由 CDockablePane 类派生出 CFileView 类,用于实现应用程序界面左侧面板上的 File View。OutputWnd.h 和 OutputWnd.cpp:由 CDockablePane 类派生出 COutputWnd 类,用于实现应用程序界面下侧面板 Output。PropertiesWnd.h 和 Prope

32、rtiesWnd.cpp:由 CDockablePane 类派生出 CPropertiesWnd 类,用于实现应用程序界面右侧面板 Properties。ViewTree.h 和 ViewTree.cpp:由 CTreeCtrl 类派生出 CViewTree 类,用于实现出现在 ClassView 和 FileView 等中的树视图。4.资源文件资源文件一般我们使用 MFC 生成窗口程序都会有对话框、图标、菜单等资源,应用程序向导会生成资源相关文件:res 目录、HelloWorld.rc 文件和 Resource.h 文件。res 目录:工程文件夹下的 res 目录中含有应用程序默认图标、工

33、具栏使用图标等图标文件。HelloWorld.rc:包含默认菜单定义、字符串表和加速键表,指定了默认的 About 对话框和应用程序默认图标文件等。Resource.h:含有各种资源的 ID 定义。5.预编译头文件预编译头文件几乎所有的 MFC 程序的文件都要包含 afxwin.h 等文件,如果每次都编译一次则会大大减慢编译速度。所以把常用的 MFC 头文件都放到了 stdafx.h 文件中,然后由 stdafx.cpp包含 stdafx.h 文件,编译器对 stdafx.cpp 只编译一次,并生成编译之后的预编译头 HelloWorld.pch,大大提高了编译效率。-_6.编译链接生成文件编

34、译链接生成文件如果是 Debug 方式编译,则会在解决方案文件夹和工程文件夹下都生成 Debug 子文件夹,而如果是 Release 方式编译则生成 Release 子文件夹。工程文件夹下的 Debug 或 Release 子文件夹中包含了编译链接时产生的中间文件,解决方案文件夹下的 Debug 或 Release 子文件夹中主要包含有应用程序的可执行文件。关于应用程序工程文件的组成结构鸡啄米就先讲到这了。其中包含了很多专有名词,以后大家会慢慢熟悉的。欢迎来鸡啄米博客交流。谢谢。-_VS2010/MFC 编程入门之四(MFC 应用程序框架分析)上一讲鸡啄米讲的是 VS2010 应用程序工程中文

35、件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟 C+编程入门系列中的例程差别太大。这一节鸡啄米就为大家分析下 MFC 应用程序框架的运行流程。一一.SDK 应用程序与应用程序与 MFC 应用程序运行过程的对比应用程序运行过程的对比程序运行都要有入口函数,在之前的 C+教程中都是 main 函数,而 Windows 应用程序的入口函数是 WinMain 函数,MFC 程序也是从 WinMain 函数开始的。下面鸡啄米就给出用 Windows SDK 写的“HelloWorld”程序,与应用程序框架进行对比,这样能更好的了解框架是怎样运行的。Windows SDK 开发程序就

36、是不使用 MFC 类库,直接用 Windows API 函数进行软件开发。鸡啄米不是要讲解 SDK 开发,只是为了对比而简单介绍,至于 SDK 开发可以在大家学完 MFC 以后选择是否要研究,一般来说有简单了解就可以了。SDK 应用程序应用程序首先,给出 Windows SDK 应用程序“HelloWorld”的源码: C+代码代码1. #include 2. 3. LRESULT CALLBACK myWndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam); 4. 5. int WINAPI WinMain(HINSTANC

37、E hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 6. 7. const static TCHAR appName = TEXT(“Hello world“); 8. WNDCLASSEX myWin; 9. myWin.cbSize = sizeof(myWin); 10. myWin.style = CS_HREDRAW | CS_VREDRAW; 11. myWin.lpfnWndProc = myWndProc; -_12. myWin.cbClsExtra = 0; 13. myWin.cbWndE

38、xtra = 0; 14. myWin.hInstance = hInstance; 15. myWin.hIcon = 0; 16. myWin.hIconSm = 0; 17. myWin.hCursor = 0; 18. myWin.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); 19. myWin.lpszMenuName = 0; 20. myWin.lpszClassName = appName; 21. /Register 22. if (!RegisterClassEx( 23. const HWND hWindow = CreateWi

39、ndow( 24. appName, 25. appName, 26. WS_OVERLAPPEDWINDOW, 27. CW_USEDEFAULT, 28. CW_USEDEFAULT, 29. CW_USEDEFAULT, 30. CW_USEDEFAULT, 31. 0, 32. 0, 33. hInstance, 34. 0); 35. ShowWindow(hWindow,iCmdShow); 36. UpdateWindow(hWindow); 37. 38. MSG msg; 39. while(GetMessage( 42. DispatchMessage( 43. 44. r

40、eturn (int)msg.wParam; 45. 46. -_47. 48. LRESULT CALLBACK myWndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam) 49. 50. if (msg=WM_PAINT) 51. 52. PAINTSTRUCT ps; 53. const HDC hDC = BeginPaint(hWindow, 54. RECT rect; 55. GetClientRect(hWindow, 56. DrawText(hDC,TEXT(“HELLO WORLD“),-1, 57. E

41、ndPaint(hWindow, 58. return 0; 59. 60. else if (msg=WM_DESTROY) 61. 62. PostQuitMessage(0); 63. return 0; 64. 65. return DefWindowProc(hWindow,msg,wParam,lParam); 66. 上面的程序运行的流程是:进入 WinMain 函数-初始化 WNDCLASSEX,调用 RegisterClassEx 函数注册窗口类-调用 ShowWindow 和 UpdateWindow 函数显示并更新窗口-进入消息循环。关于消息循环再简单说下,Windows

42、 应用程序是消息驱动的,系统或用户让应用程序进行某项操作或完成某个任务时会发送消息,进入程序的消息队列,然后消息循环会将消息队列中的消息取出,交予相应的窗口过程处理,此程序的窗口过程函数就是 myWndProc 函数,窗口过程函数处理完消息就完成了某项操作或任务。本例是要显示“HELLO WORLD”字符串,UpdateWindow 函数会发送 WM_PAINT 消息,但是此消息不经过消息队列而是直接送到窗口过程处理,在窗口过程函数中最终绘制了“HELLO WORLD”字符串。-_MFC 应用程序应用程序下面是 MFC 应用程序的运行流程,通过 MFC 库中代码进行分析:首先在 HelloWo

43、rld.cpp 中定义全局对象 theApp:CHelloWorldApp theApp;。调用 CWinApp 和 CHelloWorldApp 的构造函数后,进入 WinMain 函数(位于 appmodul.cpp 中)。C+代码代码1. extern “C“ int WINAPI 2. _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 3. _In_ LPTSTR lpCmdLine, int nCmdShow) 4. #pragma warning(suppress: 4985) 5. 6. / call shared/e

44、xported WinMain 7. return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); 8. 在 TCHAR.h 中,有此定义:#define _tWinMain WinMain,所以这里的_tWinMain就是 WinMain 函数。它调用了 AfxWinMain 函数(位于 WinMain.cpp 中) 。C+代码代码-_1. int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCm

45、dShow) 2. 3. .略 4. / App global initializations (rare) 5. if (pApp != NULL 7. 8. if (!pThread-InitInstance() 9. 10. .略 11. 12. 13. / Run 函数位于 THRDCORE.cpp 中,由此函数进入消息循环 14. nReturnCode = pThread-Run(); 15. 16. .略 17. 18. return nReturnCode; 19. 上面 InitInstance 函数的代码如下:C+代码代码1. BOOL CTestApp:InitInsta

46、nce() 2. 3. .略 4. CSingleDocTemplate* pDocTemplate; 5. pDocTemplate = new CSingleDocTemplate( 6. IDR_MAINFRAME, 7. RUNTIME_CLASS(CTestDoc), 8. RUNTIME_CLASS(CMainFrame), / main SDI framewindow 9. RUNTIME_CLASS(CTestView); 10. if (!pDocTemplate) 11. return FALSE; -_12. AddDocTemplate(pDocTemplate); 13. / Parse command line for standard shell commands, DDE, file open 14. 15. CCommandLineInfo cmdInfo; 16. ParseCommandLine(cmdInfo); 17. 18. /ProcessShellCommand 位于 AppUI2.cpp 中,注册并创建窗口

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com