1、,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类中派生出来的两个类。对话框程序的编程,可以看作是对两个派生类的编程。其中,主要是以消息响应函
2、数的形式,在CDialog类的派生类中编写代码。,8,App.h文件,由框架生成的类的第一部分,重载基类虚函数,这里只重载了一个函数:InitInstance(),由框架生成的类的第二部分,类的实现,这部分是用来响应消息的。,9,App.cpp(1),这一部分,是用来实现消息映射、消息响应的。暂时先不用去明白其原理。以后会讲到。,有且仅有一个的程序对象。,10,App.cpp(2):InitInstance函数,声明一个Dialog类对象。m_pMainWnd是App的基类中的一个指针对象。,一些选项,不用理会,调用DoModal()方法,完成窗口的创建、显示。我们在后续课程中会学到该方法。这
3、里仅了解即可。,App类的构造函数和InitInstance()是框架中最先被调用的,起到类似于main()的作用。在初始化函数InitInstance中声明程序主窗口对象 CW2_3Dlg dlg;并且创建并显示这个窗口。App.cpp文件中声明了唯一的全局App类对象:CW2_3App theApp;,11,App类小结(1),App类中,通过下面的三大宏(先不必管什么意思),实现该类的消息映射和响应。实际上,MFC框架程序中所有框架类都有这三大宏。,12,App类小结(2),对话框程序的文件结构App类Dlg类MFC程序执行流程MFC中的消息响应过程控件的手工操作和使用,13,本课内容,
4、14,Dlg.h(1)对话框数据部分,重载自基函数,数据交换函数。,通过类向导添加的成员变量,对话框数据,15,Dlg.h(2)对话框实现部分,三大宏:消息映射,该类的所有消息响应函数,程序图标句柄,16,Dlg.cpp(1)构造函数,Dlg类的构造函数中自动初始化了我们添加的各个变量,最后调用全局函数LoadIcon,装载默认的程序图标,变量的初始化,著名的MFC的DDX机制:每当通过ClassWizard为控件添加一个变量时,就会自动添加该变量的一个DDX到该函数中。DDX实现控件资源ID与成员变量的“绑定”。每当调用updatedata()函数,就会调用DoDataExchange().
5、,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程序
6、中:App类中的InitInstance可以看作程序的main,实现程序启动和窗口创建。Dlg 类中的OnInitialDialog可以看作初始化函数,用来在程序运行开始前,对程序进行设置。但:“可以看作”“就是”MFC的Main函数叫做 AfxWinMain。它被作为MFC的全局函数,独立于MFC类库存在,用户无法修改(因此也没有必要学习)。在程序启动以后,首先调用AfxWinMain,然后找到唯一的App类对象,调用其InitInstance,启动程序。,22,问题:代码中没看到main?,int AFXAPI AfxWinMain()/.CWinApp*pApp=AfxGetApp();if(!pThread-InitInstance()/.error procnRCode=pThread-Run();/.,23,程序的执行流程&演示,MFC全局函数,获取当前程序中App类对象指针,通过多态,执行App类对象的InitInstance函数,Run函数实际上启动了消息循环。通过MFC消息响应宏,实现各个类中消息的响应。,在调试时,直接F10,就能看到详细过程。演示一下。,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1