MFC教程(5)-- MFC对象的创建(2)
2010-03-25 20:33:44 来源:WEB开发网视的初始化
第六步,在边框窗口初始化之后,初始化视。
如图5-14所示,视、工具条窗口处理消息WM_INITAILUPDATE(MFC内部消息),完成初始化。这里只讨论视的消息处理函数,其原型如下:
void CView::OnInitialUpdate()
图5-14对该函数的注释说明了该函数的特殊之处。其缺省实现是调用OnUpdate(NULL, 0, NULL)更新视。可以覆盖OnInitialUpdate实现自己的初始化。
OnUpdate是一个虚拟函数,其原型如下:
void CView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
其中:
参数1指向修改文档数据的视;若更新所有的视,设为NULL;
参数2是一个包含了修改信息的long型变量;
参数3指向一个包含修改信息的对象(从CObject派生的对象)。
参数2、参数3是在文档更新对应视的时候传递过来的。
该函数用来更新显示视窗口,反映文档的变化,在MFC中,它为函数CView::OnInitialUpdate和CDocument::UpdateAllViews所调用。其缺省实现是使整个客户区无效。在下一次收到WM_PAINT消息时,重绘无效区。
工具条的初始化见讨论第13章。
激活边框窗口(处理WM_ACTIVE)
第七步,在窗口初始化完成之后,激活并显示出来。
下面讨论边框窗口激活时的处理(对WM_ACTIVE的处理)。
WM_ACTIVE的消息参数
wParam的低阶word指示窗口是被激活还是失去激活:WA_ACTIVE,被鼠标点击以外的方法激活;WA_CLICKACTIVE,由鼠标点击激活;WA_INACTIVE,失去激活;
wParam的高阶word指示窗口是否被最小化;非零表示最小化;
lPararm表示将激活的窗口句柄(WA_INACTIVE),或者将失去激活的窗口句柄(WA_CLICKACTIVE、WA_ACTIVE)。
在标准Windows消息处理的章节中,曾指出处理WM_ACTIVE消息时,先要调用一个函数_AfxHandleActivate,此函数的原型如下:
static void AFXAPI _AfxHandleActivate(CWnd* pWnd,
WPARAM nState,CWnd* pWndOther)
其中:
参数1是接收消息的窗口;
参数2是窗口状态,为WM_ACTIVE的消息参数wParam;
参数3是WM_ACTIVE的消息参数lParam表示的窗口。
_AfxHandleActivate是MFC内部使用的函数,声明和实现均在WinCore.CPP文件中。实现如下:
如果pWnd指向的窗口不是子窗口,而且pWnd和pWndOther窗口的顶级父窗口(TopLevelParent)不是同一窗口,则发送MFC定义的消息WM_ACTIVATETOPLEVEL给pWnd的顶级窗口,消息参数wParam是nState,消息参数lParam指向一个长度为二的数组,数组里存放pWnd和pWndOther所指窗口的句柄。否则,_AfxHandleActivate不作什么。
从这里可以看出:只有顶层的主边框窗口能处理WM_ACTIVE消息,事实上,Windows系统只会给顶层的非子窗口发送WM_ACTIVE消息。
更多精彩
赞助商链接