`

OnCreate PreCreateWindow PreSubclassWindow

    博客分类:
  • MFC
阅读更多

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。

分享到:
评论

相关推荐

    VC++实例详解-16(不可多得的MFC教程)

    1. **创建、移动、显示和关闭窗口**:这涉及到窗口对象的生命周期管理,包括WM_CREATE、WM_MOVE、WM_SIZE等消息的处理,以及CWnd类的CreateEx()、PreCreateWindow()、OnCreate()等函数的调用。 2. **创建和关闭有...

    MFC程序的消息处理顺序

    1.PreCreateWindow() 该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等) 2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口 3.OnGetMinMaxInfo() 该...

    MFC消息响应顺序

    例如,`PreCreateWindow()`允许在窗口创建前修改参数,`PreSubclassWindow()`用于子类化窗口,`OnGetMinMaxInfo()`处理窗口最大/最小尺寸,`OnNcCreate()`、`OnNcCalcSize()`、`OnCreate()`、`OnSize()`和`OnMove()`...

    MFC消息机制

    - `PreCreateWindow()`函数在窗口创建前被调用,允许开发者调整窗口的创建参数,比如设置窗口样式。 - `PreSubclassWindow()`允许对窗口进行子分类操作。 - `OnGetMinMaxInfo()`响应WM_GETMINMAXINFO消息,可以...

    MFC中消息响应顺序

    1. **PreCreateWindow()**:这是CWnd类的一个重载函数,允许在窗口创建之前修改创建参数,如设置窗口样式。 2. **PreSubclassWindow()**:这个重载函数用于预先子类化一个窗口。 3. **OnGetMinMaxInfo()**:响应WM...

    MFC的消息处理 应用程序创建窗口的过程

    1. PreCreateWindow 函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)。 2. PreSubclassWindow 函数也是一个重载函数,允许首先子分类一个窗口。 3. OnGetMinMaxInfo...

    模式对话框和非模式对话框消息响应

    1. **PreCreateWindow()**:该函数在对话框创建之前被调用,可用于自定义对话框属性。 2. **PreSubclassWindow()**:与模式对话框相同,用于在对话框创建后对其进行自定义设置。 3. **OnGetMinMaxInfo()**:此...

    MFC对话框创建和销毁窗口时,函数的调用顺序[归类].pdf

    1. PreCreateWindow():该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)。 2. PreSubclassWindow():这也是一个重载函数,允许首先子分类一个窗口。 3. ...

    全面解析MFC应用程序中处理消息的顺序

    - **PreCreateWindow**:该函数在窗口创建之前被调用,允许开发者修改窗口创建参数,如窗口样式等。 - **PreSubclassWindow**:用于对窗口进行预子类化处理。 - **OnGetMinMaxInfo**:响应`WM_GETMINMAXINFO`消息...

Global site tag (gtag.js) - Google Analytics