CWindow 封裝了一個HWND,包裝那些對窗口句柄操作的API。沒有其他多余的動作。析構(gòu)的時候不會自動銷毀HWND
CWindowImpl三個模板參數(shù),第一是窗口類,第二個默認(rèn)是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技術(shù):
在StartWinproc函數(shù)中完成trunk結(jié)構(gòu)的初始化,保存有自己的指針。(_AtlWinModule先藏到這里,然后,,,)
然后就是用trunk代碼(和內(nèi)存hook類似的手法直接寫機器碼)地址,替代函數(shù)地址,當(dāng)cpu準(zhǔn)備去調(diào)用這個地址的函數(shù)時自動調(diào)用機器碼,根據(jù)分析這里的機器碼將函數(shù)的參數(shù)改變了,用和HWND關(guān)聯(lián)的CWindowImplBaseT地址作為了HWND傳入回調(diào),這樣就有了對象指針了,do whatever you like,,,