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,,,