对话框程序代码详解PPT文件格式下载.pptx
《对话框程序代码详解PPT文件格式下载.pptx》由会员分享,可在线阅读,更多相关《对话框程序代码详解PPT文件格式下载.pptx(23页珍藏版)》请在冰豆网上搜索。
,5,对话框程序的文件组织,ReadMe.txt自动生成的说明文件W1_2.clw类向导使用的文件W1_2.dsp工程文件W1_2.dsw项目文件(启动)W1_2.ncb支持ClassView的文件W1_2.opt配置文件W1_2.plg日志文件,这些都是自动生成的,与程序功能和编译无关,也不需要知道它们的内部结构,记住一个原则即可:
原则2:
只修改*.cpp和*.h文件,其他一概不理。
6,文件与类,我们自己添加的函数、变量。
7,基于对话框的程序,其核心是由CWinApp和CDialog类中派生出来的两个类。
对话框程序的编程,可以看作是对两个派生类的编程。
其中,主要是以消息响应函数的形式,在CDialog类的派生类中编写代码。
8,App.h文件,由框架生成的类的第一部分,重载基类虚函数,这里只重载了一个函数:
InitInstance(),由框架生成的类的第二部分,类的实现,这部分是用来响应消息的。
9,App.cpp
(1),这一部分,是用来实现消息映射、消息响应的。
暂时先不用去明白其原理。
以后会讲到。
有且仅有一个的程序对象。
10,App.cpp
(2):
InitInstance函数,声明一个Dialog类对象。
m_pMainWnd是App的基类中的一个指针对象。
一些选项,不用理会,调用DoModal()方法,完成窗口的创建、显示。
我们在后续课程中会学到该方法。
这里仅了解即可。
App类的构造函数和InitInstance()是框架中最先被调用的,起到类似于main()的作用。
在初始化函数InitInstance中声明程序主窗口对象CW2_3Dlgdlg;
并且创建并显示这个窗口。
App.cpp文件中声明了唯一的全局App类对象:
CW2_3ApptheApp;
11,App类小结
(1),App类中,通过下面的三大宏(先不必管什么意思),实现该类的消息映射和响应。
实际上,MFC框架程序中所有框架类都有这三大宏。
12,App类小结
(2),对话框程序的文件结构App类Dlg类MFC程序执行流程MFC中的消息响应过程控件的手工操作和使用,13,本课内容,14,Dlg.h
(1)对话框数据部分,重载自基函数,数据交换函数。
通过类向导添加的成员变量,对话框数据,15,Dlg.h
(2)对话框实现部分,三大宏:
消息映射,该类的所有消息响应函数,程序图标句柄,16,Dlg.cpp
(1)构造函数,Dlg类的构造函数中自动初始化了我们添加的各个变量,最后调用全局函数LoadIcon,装载默认的程序图标,变量的初始化,著名的MFC的DDX机制:
每当通过ClassWizard为控件添加一个变量时,就会自动添加该变量的一个DDX到该函数中。
DDX实现控件资源ID与成员变量的“绑定”。
每当调用updatedata()函数,就会调用DoDataExchange().,17,Dlg.cpp
(2)MFC控件的DDX,18,Dlg.cpp(3)再现三大宏,Dlg类中的所有消息响应函数都被放在这里。
这几个函数是MFC框架中默认为对话框程序添加的系统消息响应函数。
程序Create一个对话框后,首先调用对话框的构造函数,接着就调用OnInitDialog函数。
在程序位置改变、需要刷新页面时,调用OnPaint()其他先不必理会。
19,Dlg.cpp(4)其他函数,20,小结:
App与Dlg结构共同点,预编译头文件StdAfx.h资源描述文件*.rc图标资源文件*.ico资源头文件Resource.h,21,工程中的其他文件,定义了所有资源的ID,Dlg程序中:
App类中的InitInstance可以看作程序的main,实现程序启动和窗口创建。
Dlg类中的OnInitialDialog可以看作初始化函数,用来在程序运行开始前,对程序进行设置。
但:
“可以看作”“就是”MFC的Main函数叫做AfxWinMain。
它被作为MFC的全局函数,独立于MFC类库存在,用户无法修改(因此也没有必要学习)。
在程序启动以后,首先调用AfxWinMain,然后找到唯一的App类对象,调用其InitInstance,启动程序。
22,问题:
代码中没看到main?
intAFXAPIAfxWinMain()/.CWinApp*pApp=AfxGetApp();
if(!
pThread-InitInstance()/.errorprocnRCode=pThread-Run();
/.,23,程序的执行流程&
演示,MFC全局函数,获取当前程序中App类对象指针,通过多态,执行App类对象的InitInstance函数,Run函数实际上启动了消息循环。
通过MFC消息响应宏,实现各个类中消息的响应。
在调试时,直接F10,就能看到详细过程。
演示一下。