首页 理论教育通过类向导建立数值型关联变量,VC++MFC视频教程

通过类向导建立数值型关联变量,VC++MFC视频教程

【摘要】:选择“Control”表示建立控件型关联变量,选择“Value”表示建立数值型关联变量。使用MFC应用程序向导,创建一个工程名为“cal”的对话框程序,用于演示数值型关联变量。图6-15 建立数值型关联变量图6-16 添加多个数值型关联变量7)双击“计算”按钮,建立消息映射函数并修改代码。图6-17 查看运行结果本示例演示了通过类向导对编辑框和下拉列表控件建立数值型关联变量,并且结合调用UpdateData函数对数值型关联变量输入/输出。

所有Windows基础控件都可以建立控件型关联变量,有一些控件不但可以建立控件型关联变量,而且可以建立数值型关联变量。

在第3节中,当通过类向导建立组合控件的关联变量(m_combo)时,在Category下拉列表框中包含“Value”和“Control”两项。选择“Control”表示建立控件型关联变量,选择“Value”表示建立数值型关联变量。大部分基础控件不支持数值型关联变量,只支持控件型关联变量,比如,按钮、列表控件、树形控件等;只有少部分控件才支持建立数值型关联变量,这些控件包括编辑框、下拉列表框、单选按钮、多选按钮和列表框等。

使用MFC应用程序向导,创建一个工程名为“cal”的对话框程序,用于演示数值型关联变量。

1)修改对话框标题为“计算器”并添加一些控件,如图6-12所示。

978-7-111-46378-8-Chapter06-29.jpg

图6-12 编辑主对话框资源

2)修改主对话框的控件属性,见表6-4。

表6-4 主对话框的控件属性

978-7-111-46378-8-Chapter06-30.jpg

3)在下拉列表控件IDC_OPER的Data属性中输入默认数据(换行键是<Ctrl+Enter>),如图6-13所示。

978-7-111-46378-8-Chapter06-31.jpg

图6-13 编辑下拉列表控件的属性

4)执行View→ClassWizard命令,或者按快捷键<Ctrl+W>打开类向导,如图6-14所示。

在“Member Variables”分页中,选中IDC_LEFT控件ID再单击“Add Variables”按钮,或者直接双击IDC_LEFT弹出添加关联变量的对话框。

978-7-111-46378-8-Chapter06-32.jpg

图6-14 添加数值型关联变量

5)在类向导中为一个编辑控件建立数值型关联变量,如图6-15所示。

在Category下拉列表框中,选择“Value”代表建立数值型关联变量。在Variable type下拉列表框中选择int类型,在变量名称中输入“m_nLeft”。最后单击“OK”按钮关闭对话框,完成编辑框IDC_LEFT关联变量的创建。

6)用同样的方法为三个编辑框和一个下拉列表控件,全部建立int类型的关联变量,如图6-16所示。

978-7-111-46378-8-Chapter06-33.jpg(www.chuimin.cn)

图6-15 建立数值型关联变量

978-7-111-46378-8-Chapter06-34.jpg

图6-16 添加多个数值型关联变量

7)双击“计算”按钮,建立消息映射函数并修改代码。

978-7-111-46378-8-Chapter06-35.jpg

978-7-111-46378-8-Chapter06-36.jpg

8)编译并运行,测试代码,如图6-17所示。

978-7-111-46378-8-Chapter06-37.jpg

图6-17 查看运行结果

本示例演示了通过类向导对编辑框和下拉列表控件建立数值型关联变量,并且结合调用UpdateData函数对数值型关联变量输入/输出。通过阅读MSDN说明可以了解到,UpdateData函数类似于C语言的scanf和printf函数,管理控件与关联变量之间的数据更新。UpdateData(TRUE)把界面输入的数值更新到关联变量中,UpdateData(FALSE)把关联变量存储的数据输出到界面上。

UpdateData对控件数据的输入/输出是整体性的,该函数一旦执行,窗口中所有数值型关联变量将同时被更新。如果要对单个控件的数据输入/输出,则只有使用控件型关联变量或者使用GetDlgItem系列函数(包括SetDlgItemText等)。

MSDN的UpdateData函数备注中介绍到:在对话框类中的基类中有两处自动调用UpdateData函数的地方。一是在对话框初始化(CDialog::OnInitDialog)时,内部调用UpdateData(FALSE)将数据更新到界面上。二是在对话框以确定方式关闭(CDialog::OnOK)时,内部调用UpdateData(TRUE)将数据从界面更新到关联的内存变量中。

9)在对话框类的构造函数中修改代码,将所有关联变量的初值随意修改一下。

978-7-111-46378-8-Chapter06-38.jpg

978-7-111-46378-8-Chapter06-39.jpg

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

这些数据是什么时候更新到界面上的呢?就是在对话框初始化时,是CDialog::OnInitDialog()内部调用UpdateData(FALSE)的结果。

978-7-111-46378-8-Chapter06-40.jpg

图6-18 查看运行结果