📄 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"> </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> <tr> <td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">IDC_INCOME</span></td> <td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">CString</span></td> <td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_strIncome</span></td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -