随笔分类 -  MFC 学习ING

摘要:每一个HWND都对应一个 CWnd,由CHandleMap保存这个映射,使用CWnd::Attach(HWND)来添加映射,使用HWND Detach();来移除映射.CWnd有一个静态成员函数FromHandle,可以通过HWND返回对应的CWnd的对象。Attach是在创建这个窗口的时候调用的。MFC框架 是把 所有的窗口的消息处理函数统一设置为一个AfxWndProc(),然后使用CWnd的静态成员函数获取对应的CWnd,然后分发消息,在此之前,统一用DefWindowProc填充lpfnWndProc结构。在创建窗口的时候程序已经开始处理消息了。但是这时候的窗口消息函数还是DefWin 阅读全文
posted @ 2012-11-03 10:21 IamHuskar 阅读(1487) 评论(0) 推荐(0)
摘要:每一个模块都会有导出表,导入表。IAT HOOK就是修改导入表内的函数,使得模块中的 CALL [XXXXX] call到自己的函数里面去。执行自己的功能模块开始是 IMAGE_DOS_HEADER,这个结构内有一个e_flew成员,这是个偏移,h_module+e_flew可以得到 IMAGE_NT_HEADER,Nt头内包含了很多信息,导入表也在这里面。PIMAGE_DOS_HEADER pDosHeader=(PIMAGE_DOS_HEADER)h_module;PIMAGE_NT_HEADERS pNtHeader=(PIMAGE_NT_HEADERS)(LONG(h_module)+ 阅读全文
posted @ 2012-11-01 22:44 IamHuskar 阅读(591) 评论(0) 推荐(0)
摘要:其实MFC框架就是把WIN32的API进行了封装,使得使用和编写显得更加容易。Win32Application的入口函数变成了WinMain,这个函数被放到了afxwin.h里面,这个函数,内部是这样执行的。利用AfxGetModuleState获得模块对象。初始化模块对象的一部分成员。比如吧 hinstance赋值给modulestate的HINSTANCE 成员调用 AfxGetThread获取主线程对象的指针(CWinThread*),然后AfxGetApp获取应用程序对象 CWinApp* 如果CwinApp对象指针不为空就把WinMain传来的参数给App对象的成员。如果App为空就 阅读全文
posted @ 2012-11-01 13:27 IamHuskar 阅读(1284) 评论(0) 推荐(0)
摘要:今天学习MFC。写了一个while(GetMessage(&msg,hwnd,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}本来这样的写法就是不对的 MSND中明确指出,要避免这样的写法,因为GetMessage有可能返回-1;这里hwnd是创建的窗口的句柄,这里表示获取属于hwnd的信息。当我点击叉叉关闭窗口后,该进程居然还在。我的CPU使用率达到60%.这是为什么??点击XX按钮以后,响应一个WM_DESTOY消息,销毁窗口,hwnd不存在了。WM_DESTROY调用PostQuitMessage(0),向窗 阅读全文
posted @ 2012-10-29 20:57 IamHuskar 阅读(324) 评论(0) 推荐(0)