04 2011 档案

利用thunk技术封装窗口类
摘要:TL 的思路是,每次在系统调用 WndProc 的时候,让它鬼使神差地先走到我们的另一处代码,让我们有机会修改堆栈中的 hWnd。这处代码可能是类似这样的:__asm{ mov dword ptr [esp+4], pThis ;调用 WndProc 时,堆栈结构为:RetAddr, hWnd, message, wParam, lParam, ... 故 [esp+4] jmp WndProc}由于 pThis 和 WndProc 需要被事先修改(但又无法在编译前定好),所以我们需要运行的时候去修改这部分代码。先弄一个小程序探测下这两行语句的机器码:LRESULT CALLBACK WndP 阅读全文

posted @ 2011-04-19 16:00 Pro.Charm 阅读(1733) 评论(0) 推荐(0) 编辑

窗口类封装之--窗口对象消息处理的映射方法(1)
摘要:对界面进行封装,一般都是一个窗口一个类,比如实现一个最基本的窗口类CMyWnd,你一定会把窗口过程作为这个类的成员函数,但是使用WINAPI创建窗口时必须注册类WNDCLASS,里面有个成员数据lpfnWndProc需要WNDPROC的函数指针,一般想法就是把窗口类的消息处理函数指针传过去,使用静态类成员函数,或者全局的消息处理函数,否则无法转换到WNDPROC。静态消息处理函数:缺点,消息处理函数无法获取到窗口对象的窗口句柄。全局消息处理函数:无法得到窗口类对象指针。一种解决方法是用窗口列表,开一个结构数组,窗口类对象创建窗口的时候把窗口HWND和this指针放入数组,全局消息处理函数遍历数 阅读全文

posted @ 2011-04-18 20:44 Pro.Charm 阅读(1070) 评论(0) 推荐(1) 编辑

导航

点击右上角即可分享
微信分享提示