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

今天抽空再次看了一下深入浅出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的消息映射了。很强大!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值