📄 chap5_3.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>5.3 对话框类的设计</title>
</head>
<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<font SIZE="5"><b><div align="center"><center>
<table border="0" width="85%" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr>
</b><td><div align="center"><center><table border="0" width="615" cellpadding="0"
cellspacing="0" height="20">
<tr>
<td width="377" bgcolor="#15397D" height="20"></td>
<td width="238" bgcolor="#000000" height="20"><p align="right"></font><a
href="../../vc.htm"><span style="text-decoration: none"><font color="#FFFFFF">电脑报Visual
C++网络教程</font></span></a></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" SIZE="3"><b><p ALIGN="CENTER"></b></font><font
color="#3973DE" FACE="Times New Roman" size="4">5.3 </font><font color="#3973DE" size="4">对话框类的设计</font><font
FACE="Times New Roman" size="4"></p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><span
style="font-size: 9pt">完成对话框模板的设计后,就需要设计一个对话框类以实现对话框的功能。设计对话框类主要包括下面几步:</span></p>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">创建对话框类。该类应从CDialog类派生。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">为对话框类加入与控件相对应的成员变量。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">为对话框进行初始化工作。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">增加对控件通知消息的处理</span></p>
</blockquote>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">5.3.1对话框类的创建</font></span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">利用ClassWizard,程序员可以十分方便的创建MFC窗口类的派生类,对话框类也不例外。请读者按以下几步操作:</span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">打开IDD_REGISTER对话框模板,然后按Ctrl+W进入ClassWizard。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">进入ClassWizard后,ClassWizard发现IDD_REGISTER是一个新的对话框模板,于是它会询问是否要为IDD_REGISTER创建一个对话框类。按OK键确认。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">如图5.6在Create New Class对话框中,在Name栏中输入CRegisterDialog,在Base
class栏中选择CDialog,在Dialog ID栏中选择IDD_REGISTER。按Create按钮后,对话框类CRegisterDialog即被创建。</span></p>
</blockquote>
</blockquote>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T5_6.gif"
alt="T5_6.tif (248014 bytes)" WIDTH="534" HEIGHT="443"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图5.6 Create New Class对话框</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">ClassWizard自动使类CRegesterDialog与IDD_REGISTER模板联系起来。</span></p>
<b><div align="center"><center><table border="2" cellpadding="2" cellspacing="0"
width="90%" bgcolor="#BDD0F4">
<tr>
<td width="100%"></b><span style="font-size: 9pt">提示:只要想创建的类是某一MFC窗口类的派生类,一般都可以利用ClassWizard来自动完成创建。创建的一般方法是:打开ClassWizard,选择Add
Class->New,然后在Create New Class对话框中输入新类的类名,选择其MFC基类,如果是对话框类,则还要选择对话框的ID。</span></td>
</tr>
</table>
</center></div><p ALIGN="JUSTIFY"><span style="font-size: 9pt"><font color="#3973DE">5.3.2为对话框类加入成员变量</font></span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">
对话框的主要功能是输出和输入数据,例子中的登录数据对话框的任务就是输入数据。对话框需要有一组成员变量来存储数据。在对话框中,控件用来表示或输入数据,因此,存储数据的成员变量应该与控件相对应。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">与控件对应的成员变量即可以是一个数据,也可以是一个控件对象,这将由具体需要来确定。例如,可以为一个编辑框控件指定一个数据变量,这样就可以很方便地取得或设置编辑框控件所代表的数据,如果想对编辑框控件进行控制,则应该为编辑框指定一个CEdit对象,通过CEdit对象,程序员可以控制控件的行为。需要指出的是,不同类的控件对应的数据变量的类型往往是不一样的,而且一个控件对应的数据变量的类型也可能有多种。表5.3说明了控件的数据变量的类型。</span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">表5.3</span></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">控件</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">数据变量的类型</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">编辑框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">CString, int, UINT, long, DWORD, float,
double, short, BOOL, COleDateTime, COleCurrency</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">普通检查框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">BOOL(真表示被选中,假表示未选中)</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">三态检查框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">int(0表示未选中,1表示选中,2表示不确定状态)</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">单选按钮(组中的第一个按钮)</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">int(0表示选择了组中第一个单选按钮,1表示选择了第二个...,-1表示没有一个被选中)</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">不排序的列表框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">CString(为空则表示没有一个列表项被选中),
</span><p><span style="font-size: 9pt">int(0表示选择了第一项,1表示选了第二项,-1表示没有一项被选中)</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">下拉式组合框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">CString, int(含义同上)</span></td>
</tr>
<tr>
<td WIDTH="42%"><span style="font-size: 9pt">其它列表框和组合框</span></td>
<td WIDTH="58%"><span style="font-size: 9pt">CString(含义同上)</span></td>
</tr>
</table>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">利用ClassWizard可以很方便地为对话框类CRegisterDialog加入成员变量。请读者按下列步骤操作。</span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">按Ctrl+W进入ClassWizard。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">选择ClassWizard上部的Member Variables标签,然后在Class
name栏中选择CRegisterDialog。这时,在下面的变量列表中会出现对话框控件的ID,如图5.7所示。</span></p>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T5_7.gif"
alt="T5_7.tif (368576 bytes)" WIDTH="516" HEIGHT="337"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图5.7 ClassWizard对话框</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">双击列表中的ID_AGE会弹出Add
Member Variable对话框,如图5.8所示。在Member variable name栏中输入m_nAge,在Category栏中选择Value,在Variable
type栏中选择UINT。按OK按钮后,数据变量m_nAge就会被加入到变量列表中。</span></p>
<p ALIGN="center"><span style="font-size: 9pt"><img src="T5_8.gif"
alt="T5_8.tif (157626 bytes)" WIDTH="423" HEIGHT="346"></span></p>
<p ALIGN="center"><span style="font-size: 9pt">图5.8 Add Member Variable对话框</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">仿照第3步和表5.4,为各个控件加入相应的成员变量。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">将m_nAge的值限制在16到65之间。方法是先选择m_nAge,然后在ClassWizard对话框的左下角输入最大和最小值。m_nAge代表年龄,这里规定被调查的人的年龄应在16岁以上,64岁以下。有了这个限制后,对话框会对输入的年龄值进行有效性检查,若输入的值不在限制范围内,则对话框会提示用户输入有效的值。</span></p>
</blockquote>
</blockquote>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">表5.4</span></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件ID</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">变量类型</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">变量名</span></td>
</tr>
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">IDC_AGE</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">UINT</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_nAge</span></td>
</tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -