MFC窗口的创建过程详细解析

本文详细解析了MFC中窗口创建的过程,涉及CWnd::CreateEx、AfxHookWindowCreate和AfxCbtFilterHook函数。在创建窗口前,MFC通过安装线程钩子_AfxCbtFilterHook来子类化窗口过程,使得MFC窗口能够通过消息映射机制接收和响应各种消息。这一过程包括安装钩子、窗口参数准备、子类化窗口过程等步骤,旨在提供更灵活的窗口管理。
摘要由CSDN通过智能技术生成

MFC窗口的创建过程详细解析

                                                                      作者:www.gomensoft.com

关于MFC的窗口一直感神秘,那么我来看下MFC中的窗口到底是一个什么(窗口前的窗口就直接忽略了,与Win32窗口大同小异)MFC中窗口主要涉及三个重要的函数,分CWnd::CreateEx(或者CWnd::Create)、AfxHookWindowCreateAfxCbtFilterHook函数,首先是大概介MFC的窗口,当CWnd::CreateExCWnd::CreateExAPI函数::CreateWindowEx窗口前会通过调AfxHookWindowCreate安装一个名_AfxCbtFilterHook线子,并将需要建的窗口的CWnd保存到线程状态结中,在API函数::CreateWindowEx真正窗口前AfxCbtFilterHook会被AfxCbtFilterHook行子化操作,把要建的窗口的窗口程子为线程状态结构中的窗口(AfxGetModuleState()->m_pfnAfxWndProc),即MFC窗口这样MFC的窗口(CWnd及其派生)都可以通消息映射机制接收和响包括从建开始的各种各的消息(关于AfxCbtFilterHook可以参考MSDN中关于SetWindowsHookEx的解)

 

1. CWnd::CreateEx

BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,

       LPCTSTR lpszWindowName, DWORD dwStyle,

       int x, int y, int nWidth, int nHeight,

       HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)

{

// allow modification of several common create parameters

准备一个结构给PreCreateWindow函数使用,这样就允许应用程序在创建窗口前修改窗口创建参数,比如给cs.lpszClass重新指定一个窗口类给CreateWindow函数。

CREATESTRUCT cs;

cs.dwExStyle = dwExStyle;

cs.lpszClass = lpszClassName;

cs.lpszName = lpszWindowName;

cs.style = dwStyle;

cs.x = x;

cs.y = y;

cs.cx = nWidth;

cs.cy = nHeight;

cs.hwndParent = hWndParent;

cs.hMenu = nIDorHMenu;

cs.hInstance = AfxGetInstanceHandle();

cs.lpCreateParams = lpParam;

//

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值