MFC在创建窗口时,会安装一个钩子函数:
void AfxHookWindowCreate(CWnd* pWnd)
{
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
if(pThreadState->m_pWndInit == pWnd)
return;
if(pThreadState->m_hHookOldCbtFilter == NULL)
pThreadState->m_hHookOldCbtFilter = ::SetWindowsHookEx(WH_CBT,
_AfxCbtFilterHook, NULL, ::GetCurrentThreadId());
ASSERT(pWnd != NULL);
ASSERT(pWnd->m_hWnd == NULL); // 仅挂钩一次
ASSERT(pThreadState->m_pWndInit == NULL);
pThreadState->m_pWndInit = pWnd;
}
google之后才知道,CBT是computer-based training的缩写,
有些书上竟然翻译成“基于计算机的训练”,太直白了吧!翻译之后更是不明其意,一头雾水。
知道它的英文原文也好。