dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
窗口类的诞生(注册自己的窗口类)2
来源:CSDN     作者:    

我们现在再来看看AfxDeferRegisterClass是什么样子的:

 #define AfxDeferRegisterClass(fClass) \

 ((afxRegisteredClasses & fClass) ? TRUE:AfxEndDeferRegisterClass(fClass)

 #define afxRegisteredClasses AfxGetModuleState()->m_fRegisteredClasses

 BOOL AFXAPI AfxEndDeferRegisterClass(short fClass)

 {

 WNDCLASS wndCls;

 wndCls.lpfnWndProc = DefWindowProc;

 if(fClass & AFX_WND_REG)

 {

 wndCls.lpszClassName=_afxWnd;

 AfxRegisterClass(&wndCls);

 }else if(fClass & AFX_WNDOLECONTROL_REG)

 {

 wndCls.lpszClassName=_afxWndOleControl;

 AfxRegisterClass(&wndCls);

 }else if(fClass & AFX_WNDCONTROLBAR_REG)
{

 wndCls.lpszClassName=_afxWndControlBar;

 AfxRegisterClass(&wndCls);

 }else if(fClass & AFX_WNDMDIFRAME_REG)

 {

 RegisterWithIcon(&wndCls,_afxWndMDIFrame,AFX_IDI_MDIFRAME);

 }else if(fClass & AFX_WNDFRAMEORVIEW_REG)

 {

 RegisterWithIcon(&wndCls,_afxWndFrameOrView,AFX_IDI_STD_FRAME);

 }else if(fClass & AFX_WNDCOMMCTLS_REG)

 {

 InitCommonControls();

 }

 }

 从上面的代码可以看出,AfxDeferRegisterClass函数首先判断该窗口类是否注册,如已注册则直接返回,否则调用AfxEndDeferRegisterClass进行注册,即注册要求的默认窗口类。其中RegisterWithIcon和InitCommonControls最终也是转化为调用AfxRegisterClass,而AfxRegisterClass调用RegisterClass进行注册,啊,终于看到SDK中的RegisterClass了,看到它总有一种亲切感!

 有了上面的知识,我们就可以很容易摸清MFC是怎样注册窗口类的了!我们知道Windows上所有看得见的东西,在MFC中都是继承于CWnd类的,而CWnd类创建窗口的成员函数是Create和CreateEx,由于Create最终是调用CreateEx,所以我们只需要看CreateEx就行了:
BOOL CWnd::CreateEx(DWORD dwExStyle, LPCSTSTR lpszClassName,

 …… LPVOID lpParam)

 {

 CREATESTRUCT cs;

 cs.dwExStyle = dwExStyle;

 … …

 cs.lpCreateParams = lpParam;

 PreCreateWindow(cs);

 AfxHookWindowCreate(this);

 HWND hWnd=::CreateWindowEx(cs.dwStyle,cs.lpszClass,…,cs.lpCreateParams);

 ……

 }

 啊,一看到CreateWindowEx,亲切感又来了,这不是和SDK中的CreateWindow一样嘛,是创建窗口!既然这样,那么注册窗口肯定在该之前,会是谁呢?如果你做过一点MFC程序,你就会对将眼光停留PreCreateWindow上。对!就是它了。

[1]  

 

 

上一篇:窗口类的诞生(注册自己的窗口类)1   下一篇:Gzip Zlib PNG 压缩算法,源码详解
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·窗口类的诞生(注册自己的窗口类)
·Gzip Zlib PNG 压缩算法,源码详
·让你的控制台程序也支持自动补齐
·重载函数的应用与深入剖析
·显示内存中的HTML内容
·一个对Winsock完成端口模型封装
·ado方式访问带密码数据库的方法
·VC++学习:用SDK实现分隔条
·经验总结之防止窗口闪烁的方法
·在VC中透明浮动按键的实现
·VC++5.0下MIDI、WAV及CD的播放
·在视图中同步显示鼠标的位置
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763