AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
{
CHandleMap* pMap = afxMapHWND();
{
// 获取&bbb
AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
// 返回保存在bbb中的映射类对象地址
return pState->m_pmapHWND;
}
pWnd = (CWnd*)pMap->LookupPermanent(hWnd);
{
//return (CObject*)m_permanentMap.GetValueAt((LPVOID)h);
return m_permanentMap[hWnd]; // 返回的就是pFrame
}
}
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam)
{
lResult = pWnd->WindowProc(nMsg, wParam, lParam);
{
if (!OnWndMsg(message, wParam, lParam, &lResult))
lResult = DefWindowProc(message, wParam, lParam);
return lResult;
}
}
}
BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
const AFX_MSGMAP* pMessageMap;
pMessageMap = GetMessageMap();
for (/* pMessageMap already init'ed */; pMessageMap->pfnGetBaseMap != NULL;
pMessageMap = (*pMessageMap->pfnGetBaseMap)())
{
if ((lpEntry = AfxFindMessageEntry(pMessageMap->lpEntries,
message, 0, 0)) != NULL)
{
pMsgCache->lpEntry = lpEntry;
goto LDispatch;
}
}
LDispatch:
union MessageMapFunctions mmf;
mmf.pfn = lpEntry->pfn;
switch(lpEntry->nSig)
{
...
case AfxSig_i_v_s:
// pfn_i_s ==> CMyFrameWnd::OnCreat()函数
lResult = (this->*mmf.pfn_i_s)(reinterpret_cast<LPTSTR>(lParam))
{
// 用户自己的代码 实现对WM_CREATE消息的处理
}
break;
...
}
}