首页 理论教育VC++MFC视频教程:对话框常用回调函数

VC++MFC视频教程:对话框常用回调函数

【摘要】:通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口作预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。打开第1节建立的“Test”工程,本节继续演示对话框启动过程的回调函数。

无论是模式对话框还是非模式对话框,都可以直接申请基类CDialog对象来创建。创建CDialog派生类的原因是,在派生类中可以接收对话框的消息映射和虚函数回调,响应来自用户的操作和系统事件。

窗口创建时的消息和虚函数包括WM_CREATE、WM_INITDIALOG和PreSubclassWindow等;窗口关闭时的消息和虚函数包括WM_CLOSE、WM_DESTROY、OnOK和OnCancel等。有些消息是所有窗口都通用的,例如,WM_CREATE、WM_CLOSE和WM_DESTROY等。有些消息和虚函数是对话框专用的回调函数,例如,WM_INITDIALOG消息以及OnOK、OnCancel等虚函数。

通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口作预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。可以在该函数中编写代码,在窗口刚创建还未显示时,修改父窗口的属性或者创建内部子窗口。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。基类函数CDialog::OnInitDialog执行过程将所有对话框资源模板内的控件都创建完毕。因此,可以在该函数中,编写代码来对子窗口作初始化设置。

打开第1节建立的“Test”工程,本节继续演示对话框启动过程的回调函数。

1)在类视图中的主对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Windows Message Handler”命令,如图4-14所示。

2)在左边的消息列表中,选中WM_CREATE消息再单击“Add Handle”按钮,或者直接双击该列表项添加一个消息映射函数,如图4-15所示。

978-7-111-46378-8-Chapter04-17.jpg

图4-14 消息映射管理器

978-7-111-46378-8-Chapter04-18.jpg

图4-15 添加消息映射函数

3)WM_CREATE转移到右边列表中,代表已经添加了该消息的消息映射函数,如图4-16所示。

978-7-111-46378-8-Chapter04-19.jpg

图4-16 已经添加消息映射函数

4)单击“Edit Existing”按钮,修改OnCreate函数的代码。

978-7-111-46378-8-Chapter04-20.jpg(www.chuimin.cn)

978-7-111-46378-8-Chapter04-21.jpg

5)编译并运行,测试代码,可以看到在对话框弹出之前标题已经被修改,如图4-17所示。

978-7-111-46378-8-Chapter04-22.jpg

图4-17 查看运行结果

6)修改OnInitDialog函数的代码。

978-7-111-46378-8-Chapter04-23.jpg

7)编译并运行,测试代码,如图4-18所示。

978-7-111-46378-8-Chapter04-24.jpg

图4-18 查看修改后的运行结果

通过两次修改窗口标题,可以判断出OnCreate函数的回调时间早于OnInitDialog。

8)再修改两个函数的代码,添加一行代码并测试。

978-7-111-46378-8-Chapter04-25.jpg

测试结果说明,在OnInitDialog函数中子窗口都已经创建完成,可以任意对子窗口进行初始化操作。而在OnCreate函数中,对话框中的控件子窗口还未创建,不可以操作控件窗口。