深入理解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中消息的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消息映射的原理
- MFC源码实战分析(三)——消息映射原理与消 4000 息路由机制初探
- MFC对windows三类消息映射机制的理解
- MFC消息响应机制及映射机制理解
- 从函数指针角度理解MFC消息映射
- 深入理解MFC消息循环
- 深入理解 Android消息处理系统的原理
- C++消息映射原理机制源代码[完全不是MFC中的消息映射机制]
- OllyDbg学习---深入理解消息驱动原理(2)
- MFc消息映射机制理解
- MFC消息响应机制及映射机制理解
- 深入理解Android消息处理系统原理
- 深入分析MFC消息映射
- MFC消息映射的原理:笔记
- MFC的消息映射机制的理解
- 深入理解Android消息队列原理篇
- 深入理解Android消息队列原理篇
- MFC消息映射的原理
- MFC消息映射机制的理解
- MFC消息响应原理和深入分析的整理