MFC中,各控件的类都是从窗口类CWnd派生出来的,所以控件是一窗口的一种;
[size=133%]Ø什么是对话框?
Ø对话框就是一个Dialog控件,和其他的控件不同的是,Dialog控件有自己的消息循环和Dialog回调处理程序。
Win32的应用程序有一条很明确的主线: 1:进入WinMain函数
2:设计窗口类、注册窗口类
3:产生窗口、显示窗口、更新窗口
4:进入消息循环,将消息路由到窗口过程函数(xxxProc)中去处理;
在消息处理函数中,根据消息的类型与各控件的属性,点缀整个窗口;
在MFC程序设计中,为了设计的方便,在MFC的“底层框架类”中封装了每一个窗口应用程序都需要的各步骤;
窗口的创建: CWnd类的CreateEx函数实现【CFrameWnd类的Create函数 调用 CreateEx函数; CFrameWnd类的LoadFrame函数调用Create函数】,CWnd类派生出CFrameWnd类。
Wnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。
显示窗口与更新窗口:ShowWindow(SW_SHOW);
UpdateWindow();
【UpdateWindow 将WM_PAINT消息直接发送给窗口过程处理函数进行处理,对窗口进行刷新;当窗口从无到有、改变尺寸、最小化后再恢复、被其他窗口遮盖后再显示时,窗口的客户区都将变为无效,此时系统会给应用程序发送WM_PAINT消息,我们也可以手动调用UpdateWindow函数(该函数会发送),我们呢也可以调用Invalidate(使整个窗口的客户区或者窗口上的某个控件无效,具体的名字与参数因场合不同 可能有不同)】
【CFrameWnd类派生于CWnd类】
【各控件类CEdit、CBotton等都是派生于CWnd,所以控件其实也是窗口,所以他们其实也是通过Create函数创建,创建的过程是类似的】
消息循环:CWinThread类的Run函数就是完成消息循环这一任务;该函数的主要结构是一个for循环,该循环在接收到一个WM_QUIT消息时退出。
窗口过程函数:
CWnd类:CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。
CFrameWnd类:CFrameWnd类往往用于创建应用程序的主窗口,因为它能很好地支持系统菜单和控制条(工具条、状态条等),为此定义了大量的成员函数和变量。在编写文档/视图结构的应用程序时,CFrameWnd作为主窗口管理视图和文档对象。视图对象和控制条都成为CFrameWnd的子窗口,它们分享客户区,其位置被CFrameWnd有效地排列。CFrameWnd直接支持单文档界面(SDI),对于多文档界面(MDI),使用其派生类CMDIFrameWnd和CMDIChildWnd。该类定义了两个成员函数用于创建主窗口,即Create()和LoadFrame()。前者主要通过CWnd::CreateEx()创建窗口;而后者首先组织参数,再调用前者。它们的定义如下:
|