MFC day03 伪代码


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;
 ...
 }
}

猜你喜欢

转载自blog.csdn.net/kikizxc999/article/details/86671838