OnCreate PreCreateWindow PreSubclassWindow
来源:互联网 发布:八度网络面试 编辑:程序博客网 时间:2024/06/10 05:15
PreCreateWindow和PreSubclassWindow是虚函数,而OnCreate是一个消息响应函数。
对比对话框的2种创建方式下,这3个函数的是否调用的状态:
OnCreatePreCreateWindowPreSubclassWindowCDialog::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。
- OnCreate PreCreateWindow PreSubclassWindow
- OnCreate PreCreateWindow PreSubclassWindow !
- OnCreate PreCreateWindow PreSubclassWindow
- OnCreate PreCreateWindow PreSubclassWindow
- OnCreate PreCreateWindow PreSubclassWindow
- OnCreate PreCreateWindow PreSubclassWindow
- OnCreate PreCreateWindow PreSubclassWindow什么时候调用
- OnCreate、PreCreateWindow、PreSubclassWindow的区别与联系
- precreatewindow & presubclasswindow
- PreCreateWindow、PreSubclassWindow、SubclassWindow
- PreCreateWindow函数, PreSubClassWindow函数
- PreCreateWindow、PreSubclassWindow、SubclassWindow 解析
- OnCreate和PreSubclassWindow摘录
- OnCreate()与PreCreateWindow()
- OnCreate和PreSubclassWindow摘录
- OnCreate和PreSubclassWindow摘录
- 窗口 OnCreate()与PreCreateWindow() .
- CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别
- 五家共井
- $.parseJSON(data)只支持标准的JSON
- 微信测试订阅号开发错误总结
- UIView.frame的骗局
- 产奶量》》》简单选择排序
- OnCreate PreCreateWindow PreSubclassWindow
- 内部类初次使用
- 黑盒测试用例设计方法之等价类划分
- mysql profile及其对应表使用
- Win7+Cygwin+Ns2.35 完全安装指南
- arm-linux-androideabi-ld.exe 编译错误的问题
- 存在性能问题的地方
- android中的style部分属性值介绍
- 可以展开的ListView实现