摘要: 每一个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 阅读(1445) 评论(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 阅读(556) 评论(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 阅读(1248) 评论(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 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 一:可以重载的操作符+ - * / % ^ & | ~ ! = > < += -= *= /= %= ^= &= |= >> << >>= <<= == != >= <= && || ++ --->* , -> [] () new new[]delete delete[]不能重载的操作符 :: . .* ?:提示:如果把运算符作为成员函数重载,那么类对象必须出现在运算符的左边。1.一元操作符可以是不带参数的成员函数或带一个参数的非成员函数。2.二元操作符可以是带一个参数的成员函数 阅读全文
posted @ 2012-10-22 17:48 IamHuskar 阅读(291) 评论(0) 推荐(0) 编辑
摘要: PrecedenceOperatorDescriptionAssociativity1::Scope resolutionLeft-to-right2++ --Suffix/postfix increment and decrement()Function call[]Array subscripting.Element selection by reference−>Element selection through pointer3++ --Prefix increment and decrementRight-to-left+ −Unary plus and minus! ~Log 阅读全文
posted @ 2012-10-22 16:19 IamHuskar 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 按照我来看是没有区别的。如下我编译了三段代码。int add1(int a){return a+1;}int add2(int *p){return *p+1;}int add3(int &a){return a+1;}以下调用。我再去看汇编 int s1=2; int s2=3; int s3=4; add1(s1); add2(&s2); add3(s3);PUSH 2CALL ConstTes.00401000LEA EAX,DWORD PTR SS:[EBP-4]PUSH EAXCALL ConstTes.00401010LEA ECX,DWORD PTR SS:[EB 阅读全文
posted @ 2012-09-25 09:18 IamHuskar 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 面向对象是C++的重要特性.但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法2. 必须初始化 const int i=5; //合法 const int j; //非法,导致编译错误3. 在另一连接文件中引用const常量 extern const int i; //合法 extern const int j=10; //非法,常量不可以被再次赋值4. 便于进行类型检 阅读全文
posted @ 2012-09-22 12:48 IamHuskar 阅读(366) 评论(0) 推荐(0) 编辑