OnCreate PreCreateWindow PreSubclassWindow什么时候调用

OnCreatePreCreateWindowPreSubclassWindow
作者:chenyongsuda 和c/c++相关 2010/08/09

简介:这是OnCreatePreCreateWindowPreSubclassWindow的详细页面,介绍了和c/c++,C++ OnCreate PreCreateWindow PreSubclassWindow有关的知识、技巧、经验,和一些c/c++源码等。


oncreate precreatewindow presubclasswindow

precreatewindow和presubclasswindow是虚函数,而oncreate是一个消息响应函数。

对比对话框的2种创建方式下,这3个函数的是否调用的状态:

 oncreateprecreatewindowpresubclasswindow
cdialog::create
cdialog::domodal

对比控件的2种创建方式下,这3个函数的是否调用的状态:

 oncreateprecreatewindowpresubclasswindow
通过cwnd派生类的create函数
通过对话框模版创建

 

由此可以看出:presubclasswindow是一个最靠谱的函数,在任何情况下都会得到调用。presubclasswindow是一个cwnd类的对象在attach到一个windows窗口句柄(也称为子类化,或者subclass)后所调用的第一个函数。这是个虚函数,一般从mfc的控件类派生出来的子类都会重载这个函数,在内部调用modifystyle函数来修改窗口的风格。特别的,如果使用对话框模版来创建窗体的话,一般情况下,对话框上的控件是用动态数据交换的方式来创建的(cdialog::oninitdialog会调用dodataexchange函数,继而调用ddx_control来subclass控件),此时presubclasswindow是在运行时修改控件风格的最佳地方。

precreatewindow,顾名思义是在创建窗口之前所调用的函数。通过修改传递给这个函数的类型为createstruct的参数,派生类可以修改窗口的风格。但是上面的2个表格说明这个函数得到调用的机会其实只有一个:通过cwnd派生类的create函数创建窗体的时候。特别的,对话框类的precreatewindow永远都不会被调用。

作为一个虚函数,classwizard在添加这个函数的时候,会加上对基类函数调用的代码。通常这个代码只是调用下cwnd::precreatewindow函数,而这个函数只是用来确保窗口的类名不为null,因此对基类函数的调用可以酌情省略。

oncreate是在窗口创建出来之后对wm_create消息进行响应的函数。不过很不幸的是,通过对话框模版创建出来的控件,它们的oncreate函数根本不会被调用。

总结:对话框类一般会添加oncreate消息处理函数,用于在窗口创建之后做一些工作,比如创建timer什么的;控件类一般会重载presubclasswindow函数来修改控件的风格,比如设置为ownerdraw。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值