MFC框架 CWnd的执行介绍 窗口的创建过程
每一个HWND都对应一个 CWnd,由CHandleMap保存这个映射,使用CWnd::Attach(HWND)来添加映射,使用HWND Detach();来移除映射.CWnd有一个静态成员函数FromHandle,可以通过HWND返回对应的CWnd的对象。Attach是在创建这个窗口的时候调用的。
MFC框架 是把 所有的窗口的消息处理函数统一设置为一个AfxWndProc(),然后使用CWnd的静态成员函数获取对应的CWnd,然后分发消息,在此之前,统一用DefWindowProc填充lpfnWndProc结构。
在创建窗口的时候程序已经开始处理消息了。但是这时候的窗口消息函数还是DefWindowProc,我们会漏掉很多消息,因此要先安装一个钩子,拦截HCNT_CREATEWND消息,然后调用Attach(HWND)在这里设置窗口函数的地址SetWindowLong(hwnd,GWL_WNDPROC,AfxWndProc)。SetWindowHookEx的时候把钩子句柄保存到线程局部变量中,以备CallNextHookEx使用。
Hook()
CreateWindowEx()函数执行的时候钩子会被执行,
UnHook()
这样我们就可以通过一个全局的函数处理所有的消息了。
消息处理的时候,可以通过wparam lparam 处理,也可以通过线程的局部变量m_lastSendMsg。
proc()
{
m_lastSendMsg=msg;
处理消息()
{
通过线程局部变量m_lastSendMsg获得消息。。或者通过参数。
}
}
最后就是Cwnd::CreateEx的实现了
{
填充WNDCLASS结构CS
if(!PreCreateWindow(&CS))//用户可以重载这个函数,修改CS样式,如果不重载,只是把这个窗口类名修改为默认的_afxwnd,不然这个窗口类就会没有名字。
{
执行失败返回 FALSE;
}
Hook();安装钩子
CreateWindowEx();
UnHook();
没问题 返回OK
}
转载于:https://www.cnblogs.com/IamHuskar/archive/2012/11/03/2752239.html
a1853081084 原创文章 0获赞 0访问量 129 关注 私信- MFC学习笔记.day02-创建窗口全过程,MFC执行顺序,BUTTON控件,对象与窗口关系
- mfc学习之主框架窗口创建过程
- VC/MFC中窗口创建和销毁以及MFC应用程序框架
- MFC应用程序创建窗口的过程 good
- 最简单的MFC窗口创建_框架
- MFC应用程序创建窗口的过程
- 温故而知新,学习MFC框架如何创建的过程
- 温故而知新,学习MFC框架如何创建的过程
- vc++窗口的创建过程(MFC消息机制的经典文章)
- MFC窗口创建过程
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- MFC框架如何创建的过程
- MFC 窗口创建与销毁过程中发生的一些事情...
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- vc++窗口的创建过程(MFC消息机制的经典文章)
- 学习MFC框架如何创建的过程
- MFC窗口创建过程
- 温故而知新,学习MFC框架如何创建的过程
- 温故而知新,学习MFC框架如何创建的过程