CWindow 封裝了一個HWND,包裝那些對窗口句柄操作的API。沒有其他多余的動作。析構的時候不會自動銷毀HWND
CWindowImpl三個模板參數,第一是窗口類,第二個默認是CWindow,第三個是窗口類型。
class ATL_NO_VTABLE CMessageMap
{
public:
virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
LRESULT& lResult, DWORD dwMsgMapID) = 0;
};
atl的消息map基類,,,
牛逼神奇其實就那樣的trunk技術:
在StartWinproc函數中完成trunk結構的初始化,保存有自己的指針。(_AtlWinModule先藏到這里,然后,,,)
然后就是用trunk代碼(和內存hook類似的手法直接寫機器碼)地址,替代函數地址,當cpu準備去調用這個地址的函數時自動調用機器碼,根據分析這里的機器碼將函數的參數改變了,用和HWND關聯的CWindowImplBaseT地址作為了HWND傳入回調,這樣就有了對象指針了,do whatever you like,,,