您的位置:首页 > 其它

深入理解MFC中的消息映射原理!!!

2009-02-11 22:10 405 查看
今天抽空再次看了一下深入浅出MFC,从中又学到了新的东西!

时间有限,很晚了,简单写一下:

MFC中消息的WinMain函数实际上是被编译器自己添加进去的,MFC中我们看不到WinMain函数!

大概的代码如下:

CWinApp  theApp;

BOOL  AFXAPI   AfxWinMain(....)

{

     CWinApp *   pApp =  AfxGetApp();

     AfxWinInit(..........);

     pApp->InitApplication();

     pApp->InitInstance();

     nReturnCode = pApp->Run();

 

     AfxWinTerm();

 

}  

 

 

在AfxWinInit中,我们可以看到在其中设置了以消息钩子函数

     通过调用AfxInitThread()

   再调用 SetWindowsHookEx(WH_MSGFILTER, _AfxMsgFilterHook,NULL,::GetCurrentThreadId());

 

 

而在InitInstance中在创建主窗口之前,MFC也通过SetWindowsHookEx  设置了一个WH_CBT  类型的钩子

并且他的钩子过程是_AfxCbtFilterHook

这个类型的钩子,当有窗口创建的时候他就会触发这个钩子过程,所以在每个窗口(不论是主窗口还是子窗口)  都会触发这个过程。

在 _AfxCbtFilterHook中,

又通过SubclassWindow讲所有的窗口的过程替换成了AfxWndProc,

这样所有窗口的消息都要经过MFC的消息映射了。很强大!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 编译器 null