WEB开发网
开发学院软件开发VC MFC教程(5)-- MFC对象的创建(2) 阅读

MFC教程(5)-- MFC对象的创建(2)

 2010-03-25 20:33:44 来源:WEB开发网   
核心提示:WM_ACTIVATETOPLEVEL消息的处理CWnd及派生类CFrameWnd实现了对WM_ACTIVATETOPLEVEL消息的处理,分别解释如下:消息处理函数CWnd::OnActivateTopLevel如果失去激活,MFC教程(5)-- MFC对象的创建(2)(6),则取消工具栏的提示(TOOLTIP),消

WM_ACTIVATETOPLEVEL消息的处理

CWnd及派生类CFrameWnd实现了对WM_ACTIVATETOPLEVEL消息的处理,分别解释如下:

消息处理函数CWnd::OnActivateTopLevel如果失去激活,则取消工具栏的提示(TOOLTIP)。

消息处理函数CFrameWnd::OnActivateTopLevel调用CWnd的OnActivateTopLevel;如果接收WM_ACTIVE消息的窗口是线程主窗口,则使得其活动的视窗口变成非活动的(OnActive(FALSE, pActiveView,pActiveView)。

从这里可以知道,在顶层窗口接收到WM_ACTIVE消息后,MFC会进行一些固定的处理,然后才调用WM_ACTIVE消息处理函数。

WM_ACTIVE消息的处理

在_AfxHandleActivate和WM_ACTIVATETOPLEVEL消息处理完之后,才是对WM_ACTIVE的处理。CWnd和CFrameWnd都实现了消息处理。

CWnd的消息处理函数:

void CWnd::OnActive(UINT nState, CWnd* pWndOther, BOOL bMinimized)

其中:

参数1取值为WA_INACTIVE/WA_ACTIVE/WA_CLICKACTIVE;

参数2指向激活或者失去激活的窗口,具体同WM_ACTIVE消息;

参数3表示是否最小化。

此函数的实现是调用Default(),作缺省处理。

CFrameWnd的消息处理函数:

void CFrameWnd::OnActive(UINT nState,CWnd* pWndOther, BOOL bMinimized)

首先调用CWnd::OnActivate。

如果活动视非空,消息是WA_ACTIVE/WA_CLICKACTIVE,并且不是最小化,则重新激活当前视,调用了以下函数:

pActiveView->OnActiveView(TRUE,pActiveView,pActiveView);

并且,如果活动视非空,通知它边框窗口状态的变化(激活/失去激活),调用以下函数:

pActiveView->OnActivateFrame(nState, this)。

SDI流程的回顾

从InitialInstance开始,首先应用程序对象创建文档模板,文档模板创建文档对象、打开或创建文件;然后,文档模板创建边框窗口对象和边框窗口;接着边框窗口对象创建视对象和视窗口。这些创建是以应用程序的文档模板为中心进行的。在创建这些MFC对象的同时,建立了它们之间的关系。创建这些之后,进行初始化,激活主边框窗口,把边框窗口、视窗口显示出来。

这样,一个SDI应用程序就完成了启动过程,等待着用户的交互或者输入。

5.3.4节将在SDI程序启动流程的基础之上,介绍MDI应用程序的启动流程。两者的相同之处可以这样类比:创建SDI边框窗口、视、文档的过程和创建MDI文档边框窗口、视、文档的过程类似。不同之处主要表现在:主边框窗口的创建不一样;MDI有文档边框窗口的创建,SDI没有;SDI只能一个文档、一个视;MDI可能多文档、多个视。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:MFC 教程 MFC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接