MFC宏消息處理機制的原理
阿新 • • 發佈:2017-08-24
creates clas poi basemap 保持 改變 all 機制 int
1.1、在MFC中處理消息的函數是固定的,如afx_msg int OnCreate(LPCREATESTRUCT);這是一個固定的,對應於ON_WM_CREAT()宏。如果改變了函數名,對應的宏就會不認識。
1.2、MyCreate函數,用來響應系統的WM_CREATE消息,這些函數是有固定格式要求的。並且函數名必須和MSDN給定的函數名保持完全一致。
1.3、
struct AFX_MSGMAP { const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)(); const AFX_MSGMAP_ENTRY* lpEntries; };
1.4、
struct AFX_MSGMAP_ENTRY { UINT nMessage; // windows message UINT nCode; // control code or WM_NOTIFY code UINT nID; // control ID (or 0 for windows messages) UINT nLastID; // used for entries specifying a range of control id‘s UINT_PTR nSig; // signature type (action) or pointer to message #AFX_PMSG pfn; // routine to call (or special value) };
1.5、OnWndMsg();這個函數負責處理消息映射機制宏中的消息。
1.6、
struct AFX_MSG_CACHE { UINT nMsg; AFX_MSGMAP_ENTRY *lpEntry; AFX_MSGMAP *pMessageMap; }
1.7、AfxFindMessageEntry(pMessageMap->lpEntries, message, 0, 0) != null
如果,pMessageMap->lpEntries指向的數組中,有message消息,那麽該函數返回數組中這個元素的地址,否則返回null
MFC宏消息處理機制的原理