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