10.2.4 对话框控件通知消息的处理
前面几小节介绍的内容都是为对话框工作做准备工作的,对话框最主要的功能就是处理消息函数。当使用类向导创建对话框类,则向导会为类向导生成空消息映射。其中对话框可以处理的消息除Windows消息外,还可以处理控件消息。除手动向消息映射中增加要处理的消息外,VC 6.0提供的类向导可以映射任何想要类处理的消息或命令。为每个消息编写消息映射条目,并在类中增加消息处理成员函数。
在介绍控件消息处理之前,首先介绍几个CDialog类常用的虚函数,这些函数在通常的对话框应用中都需要对其进行重载以完成自定义功能。需要注意的是类向导不会为这些消息增加消息映射条目。
对应于WM_INITDIALOG消息的OnInitDialog()成员函数,作用是初始化对话框控件。此函数只有在对话框显示之前才会被调用,用户必须从重载中调用默认的OnInitDialog处理。默认情况下,OnInitDialog返回true,表示焦点可以设置到对话框中第一个焦点。
对应于按钮IDOK的BN_CLICKED消息的OnOK()成员函数,用于响应用户单击OK按钮的消息。这个消息函数是相对于非模式对话框而言的。
对应于按钮IDCANCEL的BN_CLICKED消息的OnCancel()成员函数,用于响应用户单击Cancel按钮的消息。
在对话框中可以包含多种类型的控件,诸如CListBox、CEdit等。要使用这些控件,需要为这些控件对应的消息编写消息处理函数,步骤如下:
(1)按下Ctrl+W组合键,打开MFC ClassWizard对话框,选择Message Maps选项卡,如图10-12所示。
(2)在上面的Class name下拉列表框中选择对应的对话框类,在Object IDs列表框中选择要添加消息处理的控件的ID,在Messages列表框中选择控件对应的消息,单击Add Function按钮,打开Add Member Function对话框,如图10-13所示。
|
| (点击查看大图)图10-12 MFC ClassWizard对话框 |
|
| 图10-13 Add Member Function对话框 |
(3)在Member function name文本框中输入消息处理函数,单击OK按钮,这样就添加了控件消息处理函数的添加。
(4)在添加的函数中添加处理代码,代码如下:
- void CDlgSample::OnChangeEdit1()
- {
- // 这里是文本框内容改变消息的处理函数
- }