CMyApp 类:CMyApp 类的对象代表一个应用程序,CWinApp 基类决定它的大部分行为。
③应用程序的启动:当开始运行应用程序时 WINDOWS 会调用 WinMain 函数,WinMain 会查找该应用程序的全局对象 theApp。
④CMyApp::InitInstance 成员函数:发现 theApp 后自动调用重载的虚函数 InitInstance 来完成主窗口的构造和显示工作。
记住这个函数。
⑤CWinApp::Run 成员函数:WinMain 在调用 InitInstance 之后紧接着调用 Run 函数,它被隐藏在基类中负责传递应用程序的消息给相映的窗口。
(我把它理解为好象 SDK 的窗口的过程函数不知对不对)⑥CMyFrame 类:此类的对象代表着应用程序的主窗口。
它的构造函数调用基类 CFrameWnd 的 Create 函数创建具体的窗口结构。
⑦CMyFrame::OnLButtonDown 函数:演示消息处理机制,当鼠标坐键被按下这一事件被映射到 CMyFrame的 OnLButtonDown 函数上,如果你选择 F5 进行编译运行的话可以在调试窗口看到 TRACE 宏显示的类似下面的信息 Entering CMyFrame::OnLButtonDown - 1309119 Entering CMyFrame::OnLButtonDown - 1408221⑧CMyFrame::OnPaint 函数:应用程序每次重新绘制窗口都需要调用此函数,将显示quotHello Worldquot放在这里是因为每次窗口发生变化时保证quotHello Worldquot被显示,你可以试着将语句: CPaintDC dcthis dc.TextOut 00quotHello Worldquot写在别出,例如写在void CMyFrame::OnLButtonDown UINT nFlagsCPoint point TRACEquotEntering CMyFrame::OnLButtonDown - lxddnquot longnFlagspoint.x point.y CPaintDC dcthis dc.TextOut 00quotHello Worldquot运行后当点击左键时显示quotHello Worldquot,但当窗口最小化再最大化时quotHello Worldquot不见了。
⑧关闭应用程序:用户关闭应用程序时会有一系列事件发生。
首先 CMyFrame 对象被删除,然后退出 Run,进而退出 WinMain,最后删除 CMyApp 对象。
通过上面的示例我们看见程序的大部分功能包含在基类 CWinApp 和 CFrameWnd 中,我们只写了很少的函数,便可以完成很复杂的功能。
所以应用程序框架不仅仅是一种类库,它还定义了应用程序的结构,除了基类外还包括 WinMain 函数,以及用来支持消息处理、诊断、DLL、等都包含在应用程序框架中。
第三篇:消息映射和视图类在写了两篇笔记后有很多朋友给我发信,和我交流一些在学习过程中的问题。
但由于我也是一个初学者,对一些问题自己也没有把握,所以实在不敢做答,但我会尽量尽我所能和大家一起研究,谢谢大家的鼓励和信任。
在开始先补充一下上一篇的内容“内容窗口的创建”,兼答天歌网友的问题(如果天歌兄弟能看到的话 )。
为了简化我们看一个更简单代码,只有一个文件,创建一个空白的窗口,什么也不做。
注意哦:真写程序时还是要分成.h 和.cpp 两个文件比较清晰。
前几步和『VC技术内幕』学习笔记(2)中的一样,下面是代码://// MyApp.cppinclude quotafxwin.hquot //afxwin.h 会调用 windows.h 是 MFC 编程的途径,只要用到 MFC 就一定要包含它。
class CMyApp:public CWinApp //从 CWinApp 继承一个类public: virtual BOOL InitInstance//重载 InitInstance 虚函数class CMyFrame:public CFrameWnd //从 CFrameWnd 继承一个类CMyApp myApp //最后又激活应用程序的构造函数BOOL CMyApp::InitInstance m_pMainWndnew CMyFrame //new 激活了 CMyFrame 类构造函数 CFrameWnd,构造函数调又用 CREATE //m_pMainWnd 在 MFC 的 定 义 CWnd m_pMainWnd// main window usually sameAfxGetApp-gtm_pMainWnd //m_pMainWnd 保存窗口的位置 CMyFrame m_pMainWnd-gtCreateNULLquot一个 MFC 应用程序:空白窗口quot //创建窗口 m_pMainWnd-gtShowWindowm_nCmdShow //显示在屏幕上 return TRUE如果还不明白建议查看 MSDN 或看看侯大师的深入浅出。
关于这个问题就说到这,最后对天歌朋友的学习态度表示敬意。
下面进入正体,让我们继续来看看 MFC 的消息映射。
MFC 是通过一些宏来将特定的消息影射到派生类相应的成员函数上,这种体制的好处是允许某些非窗口类(如文档类)来控制命令消息。
且不需