- 浏览: 71391 次
- 性别:
- 来自: 上海
文章分类
最新评论
OnCreate PreCreateWindow PreSubclassWindow
PreCreateWindow和PreSubclassWindow是虚函数,而OnCreate是一个消息响应函数。
对比对话框的2种创建方式下,这3个函数的是否调用的状态:
OnCreate | PreCreateWindow | PreSubclassWindow | |
CDialog::Create | 是 | 否 | 是 |
CDialog::DoModal | 是 | 否 | 是 |
对比控件的2种创建方式下,这3个函数的是否调用的状态:
OnCreate | PreCreateWindow | PreSubclassWindow | |
通过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。
发表评论
-
自己写的一段customerDraw
2010-08-24 16:20 1859void CNewReportPage::OnNMCustom ... -
帖BitMap
2010-08-24 09:42 751void CEx_14View::O ... -
clistctrl +号按钮绘制
2010-08-11 17:18 1527网上有关clistctrl举不胜举,包括按钮控件的绘 ... -
listctrl总结2
2010-08-11 17:11 94920. listctrl的subitem添加图标 ... -
VC中使用ListCtrl经验总结(1)
2010-08-11 17:07 1284ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用 ... -
LV_COLUMN结构体
2010-08-10 14:44 2643typedef struct _LV_COLUMN {UINT ... -
加载位图BITMAP
2010-08-10 14:27 1406m_Bitmap.LoadBitmap(IDB_BITMAP1 ... -
关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别
2010-08-10 13:15 6386而OnPaint()是CWnd的类成员,同时负责响应WM_ ... -
listctrl 重绘
2010-08-10 10:15 1019common control 4.7版本介绍 ... -
扩展CListCtrl实现颜色长度改变
2010-08-09 17:34 3171用CListCtrl来显示数据比较方便,有时候我们需要标注某一 ... -
创建CListCtrl中的排序小图标
2010-08-09 17:11 2275创建CListCtrl中的排序小图标 for(int i = ... -
CListCtrl控件的使用
2010-08-09 17:02 1159初始化: DWORD dwStyle; dwStyle = m ... -
改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景
2010-08-09 16:49 2571改变 CListCtrl、CHeaderCtrl 高度、字体、 ... -
CHeaderCtrl用法
2010-08-09 15:47 4207CListCtrl的表头可以单独 ... -
CListCtrl::SortItems的用法:
2010-08-09 12:37 1956CListCtrl::SortItems的用法: (一)So ... -
树型视的三个结构TVINSERTSTRUCT、TVITEM、NMTREEVIEW
2010-08-05 18:11 957TVINSERTSTRUCT包含添加新项到树形视控件所使用的信 ... -
剪贴板和OLE拖放
2010-08-05 16:35 1094一、传统剪贴板 ... -
文档/视图结构中的各个部分是如何联系到一起的
2010-08-05 15:39 719文档/视图结构是MFC中最有特色而又有难度的部分,在这当中涉及 ... -
MFC一些函数区别
2010-08-05 13:43 1613GetMessagePos GetCursorPos的区别 ... -
LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义
2010-08-05 13:33 992UNICODE:它是用两个字节 ...
相关推荐
Android Studio SQLite不调用oncreate方法
这一份代码是实现MFC的窗口创建完成需要立刻对某些...因为在MFC的初始化函数中,窗口创建还没有完成不能对窗口上的控件进行初始化操作,这是需要调用OnCreate函数来完成初始化控件的操作。 这个VS工程是使用VS2017。
本文主要介绍Android onCreate( )方法,做Android应用的朋友对onCreate()的方法并不陌生,在开发应用的时候大家应该注意什么呢,这里给大家详细说明
用vc++6.0创建一个A名称MFC(EXE)对话框工程,在...3、右击IDD_A_DIALOG对话框在OnCreate()函数中添加代码 b.Create(IDD_DIALOG1); //IDD_DIALOG1为对话框ID 4、在按钮单击事件中添加代码 b.ShowWindow(SW_SHOWNORMAL);
在要调用类的OnCreate函数中添加dlg.Create(IDD_DIALOG1,this);和 dlg.ShowWindow(SW_SHOW); 两个语句,如下所示: int CTestDlgCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate...
主要介绍了Android编程实现两个Activity相互切换而不使用onCreate()的方法,结合实例形式分析了多个Activity切换而不重新创建的操作技巧,需要的朋友可以参考下
360脱壳案例
1.PreCreateWindow() 该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等) 2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口 3.OnGetMinMaxInfo() 该...
What i feel is, till the execution of onCreate() completes, the views wont be bo
主要介绍了Android OnCreate()中获取控件高度与宽度两种方法详解的相关资料,这里提供了两种方法,大家可以都看下,需要的朋友可以参考下
java // 在application的onCreate中初始化 @Override public void onCreate() { super.onCreate(); x.Ext.init(this); // 这一步之后, 我们就可以在任何地方使用x.app()来获取Application的实例了. x.Ext.setDebug...
主要介绍了Android中oncreate中获得控件高度或宽度的实现方法的相关资料,希望通过本文大家能实现这样的功能,需要的朋友可以参考下
直接的想法是从Activity的onCreate或者onResume里面去获取这个View的宽/高。但是实际上在onCreate、onStart、onResume中均无法获取正确的宽/高信息。 原因在于View的Measure过程和Activity的生命周期方法不是...
源码可知:1)通过反射的机制创建的Activity2)这里的mInstrumentation是类Instrumentation3)Instrumentation
生成TAG logt+Tab键: private static final String TAG = “Extract”; 生成Log.d() logd+Tab键: Log.d(TAG, “onCreate: “);...Log.e(TAG, “onCreate: “,new ...Log.d(TAG, “onCreate() called with: sav
安卓没有相关的解压缩RAR5的库,正好整理了源码供大家 参考
在Android中,有时需要对控件进行测量,得到的控件宽度和高度可以用来做一些计算。在需要自适应屏幕的情况下,这种计算就显得特别重要
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)创建窗口重新设置窗口参数 BOOL CChildView::PreTranslateMessage( MSG* pMsg ) 翻译消息 int CChildView::OnCreate( LPCREATESTRUCT lpCreateStruct ) 窗口创建...