当前位置:松语文学 > 其他类型 >VC++_6.0程序设计从入门到精通最新章节 > VC++_6.0程序设计从入门到精通TXT下载
错误举报

第 18 章

  骤如下:

  (1)在如图4-15 所示的对话框的“Control IDs”列表框中选择IDC_LOGINNAME,然

  后单击“Add Variable”按钮,打开如图4-16 所示的添加成员变量对话框。

  (2)按如下方法设置IDC_LOGINNAME 的成员变量。

  ? 在“Member variable ncom ”输入框中输入m_szLoginNcom,即将变量命名为

  m_szLoginNcom。

  枫叶文学网www.fywxw.com

  第4 章 对话框

  ·69·

  图4-16 添加成员变量对话框

  ? 在“Category”下拉列表框中选择“Value”,表明创建的变量是值,而不是控件。

  ? 在“Variable type”下拉列表框中选择CString,表明变量类型为CString。

  单击“OK”按钮,确认并返回ClassWizard 对话框。

  (3)添加一个m_szPassword 变量,对话框设置如下。

  ? 在“Member variable ncom ” 输入框中输入m_szPassword , 即将变量命名为

  m_szPassword;

  ? 在“Category”下拉列表框中选择“Value”,表明创建的变量是值,而不是控件;

  ? 在“Variable type”下拉列表框中选择“CString”,表明变量类型为CString。

  单击“OK”按钮,确认并返回ClassWizard 对话框,如图4-17 所示。

  图4-17 完成变量添加的编辑成员变量的界面

  (4)此时可以看到,在“Control IDs”列表框中选择“IDC_LOGINNAME”项后,在对

  话框的下方将出现该变量的属xìng介绍和说明。对于CString 变量,还有一个“Maximum

  Characters”输入框,用于设置C_LOGINNAME 输入框中的输入字符的个数。在本实例中可

  以不作这个限定,故此输入框设置为空。

  (5)单击“ClassWizard”对话框中的“OK”按钮后,回到IDE 主界面,完成变量的添

  加。

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·70·

  此时在IDE 左侧单击“ClassView”选项卡,可以看到新建了一个类CLoginDialog,展开

  CLoginDialog 节点,可以看到该类中添加了m_szLoginNcom 和m_szPassword 两个控件变量。

  3.数据jiāo换和检验

  程序运行时,用户更改控件属xìng,如在输入框中输入文字或者改变复选框的选中状况后,

  MFC 会修改对应控件变量的值。这个过程是通过MFC 为对话框类自动添加的成员函数

  DoDataExchange()实现的,称为对话框数据jiāo换和检验机制。该函数在LoginDialog.cpp 中的

  代码如下:

  void CLoginDialog::DoDataExchange(CDataExchange* pDX)

  {

  CDialog::DoDataExchange(pDX); //处理MFC 默认的数据jiāo换

  //下面的代码处理控件与控件变量之间的数据jiāo换,一般由MFC 自动添加

  //{{AFX_DATA_MAP(CLoginDialog)

  //处理控件IDC_LOGINNAME 和变量m_szLoginNcom 之间的数据jiāo换

  //DDX_Text 表明是进行文本数据jiāo换

  DDX_Text(pDX, IDC_LOGINNAME, m_szLoginNcom);

  //处理控件IDC_PASSWORD 和变量m_szPassword 之间的数据jiāo换

  DDX_Text(pDX, IDC_PASSWORD, m_szPassword);

  //}}AFX_DATA_MAP

  }

  MFC 提供了处理控件与控件变量之间的数据jiāo换的机制,因此在代码中访问控件的属

  xìng,就可以直接通过访问控件变量进行。如实例Sample4_1 运行时,打开登录对话框,在“用

  户名”输入框中输入字符串,通过CLoginDialog::DoDataExchange()函数,m_szLoginNcom

  就自动保存所有输入的字符串值,反之如果程序运行时修改了m_szLoginNcom,则通过

  CLoginDialog::DoDataExchange()函数,“用户名”输入框就会显示m_szLoginNcom 的值。

  这里需要注意,控件和控件变量之间的数据jiāo换并非自动完成的,即DoDataExchange()

  函数不是自动被调用的。例如在“用户名”输入框中输入字符串时,m_szLoginNcom 的值并

  不随之改变,需要调用CDialog::UpdateData()函数才能做到从控件到控件变量或者从控件变

  量到控件的数据传送。

  CDialog::UpdateData()函数的原型为:

  BOOL UpdateData(

  BOOL bSaveAndValidate = TRUE

  );

  bSaveAndValidate 参数用于指示数据传输的方向,TRUE 表示从控件传给变量,FALSE

  表示从变量传给数据。

  CDialog::UpdateData()函数的返回值用于确定cāo作是否成功,为FALSE 表示不成功。

  在实例Sample4_1 中,如果要通过控件变量访问“用户名”和“密码”两个输入框的输

  入值,可以用如下代码:

  UpdateData(); //参数默认值为TRUE,用于保存对话框的控件值

  //验证用户名和密码

  枫叶文学网www.fywxw.com

  第4 章 对话框

  ·71·

  if (m_szLoginNcom == "user" && m_szPassword == "test1234")

  {

  //验证通过,并提示用户

  ??

  }

  如果要设置“用户名”和“密码”两个输入框的值,则可以用如下代码:

  //清除对话框中的输入

  m_szLoginNcom = "";

  m_szPassword = "";

  //根据控件变量设置对话框的控件的值

  UpdateData(FALSE);

  4.为对话框类添加控件通知消息的处理函数

  MFC 为对话框和控件定义了许多消息,可以通过“ClassWizard”对话框来查看、新建和

  删除相应的消息响应函数。下面在实例Sample4_1 的登录对话框中添加单击“确认”和“取

  消”两个按钮的消息处理函数,步骤如下:

  (1)在IDE 主菜单栏中依次选择菜单“View|ClassWizard”,或者在开发环境的界面下直

  接使用快捷键Ctrl+W,打开“ClassWizard”对话框,选择“Message Maps”选项卡,在“Project”

  下拉列表框中选择Sample4_1,在“Class ncom”下拉列表框中选择“CLoginDialog”。

  图4-18 控件IDOK 的通知消息

  (2)在“Object IDs”列表框中选择IDOK,对应的控件是“确认”按钮,按钮一般有两

  种通知消息,分别是BN_CLICKED(按钮被单击)和BN_DOUBLECLICKED(按钮被双击)。

  (3)要为对话框添加用户单击“确认”按钮后的验证过程,需要添加一个处理IDOK 的

  BN_CLICKED 通知消息成员函数。在“Messages”列表框中选择BN_CLICKED,单击“Add

  Function”按钮,或直接双击“Messages”列表框中的BN_CLICKED,弹出Addcommber function

  对话框,单击“OK”按钮就可以创建一个名称为OnOK 的消息处理函数。单击“Edit Code”

  按钮,退出ClassWizard,并自动打开LoginDialog.cpp 文件,且定位在OnOK()函数上。

  为OnOK()函数添加如下代码:

  void CLoginDialog::OnOK()

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·72·

  {

  // TODO: Add extra validation here

  //以下添加用户名和密码的验证过程

  //注意,在对话框的OnOK 函数中自动调用CDialog::UpdateData(TRUE),

  //即自动更新控件变量的值

  //本例为简单起见,合法的用户名只能是user,对应密码为test1234

  if (m_szLoginNcom == "user" && m_szPassword == "test1234")

  {

  //验证通过,并提示用户

  //MessageBox 是Windows 系统的消息对话框,用于提示简单的消息,

  //具体内容可以参考本章的最后一节

  MessageBox("用户验证通过", "登录提示",MB_OK);

  }

  else

  {

  //验证不通过

  //提示用户

  MessageBox("用户验证失败", "登录提示",MB_OK);

  //退出主程序

  AfxGetMainWnd()->PostMessage(WM_QUIT);

  //返回登录失败

  //EndDialog 退出对话框,参数表示对话框的返回值,本例

  //用"取消"按钮的ID 作为验证失败返回值

  EndDialog(IDCANCEL);

  }

  //默认的消息处理函数,用于退出对话框,返回值为IDOK

  CDialog::OnOK();

  }

  技巧:一般要退出程序,只需要销毁该程序的主窗口,即向该程序的主窗口发送WM_QUIT 消息,

  代码为AfxGetMainWnd()->PostMessage(WM_QUIT);。

  (4)按前面所述方法,打开“ClassWizard”对话框,为CLoginDialog 的IDCANCEL 按

  钮控件的BN_CLICKED 消息添加消息处理函数OnCancel()。在程序中单击“取消”按钮与

  验证失败的处理方法相同,因此修改CLoginDialog::OnCancel()函数,代码如下:

  void CLoginDialog::OnCancel()

  {

  // TODO: Add extra cleanup here

  //验证不通过

  //提示用户

  枫叶文学网www.fywxw.com

  第4 章 对话框

  ·73·

  MessageBox("用户验证失败", "登录提示",MB_OK);

  //退出主程序

  AfxGetMainWnd()->PostMessage(WM_QUIT);

  //默认的消息处理函数,用于退出对话框,返回值为IDCANCEL,

  //同本例的OnOK 验证失败的返回值

  CDialog::OnCancel();

  }

  添加控件通知消息处理函数后,对话框类的创建任务基本完成,对话框类能基本实现对

  话框所需的功能。

  4.2 模态对话框

  Windows 系统中对话框大致可以分为以下两种:

  ? 模态对话框。这类对话框弹出后,其他程序会被挂起,只有当前对话框响应用户的输

  入。模态对话框一般要求用户做出某种选择。

  ? 非模态对话框。打开非模态对话框后,程序的其他窗口仍能响应消息,程序仍可以继

  续运行。非模态对话框一般用来显示信息,或者实时地进行一些设置。

  实例4-2:创建模态对话框实例。源代码在光盘中“\04\实例4-2\Sample4_1”目录下。

  本节还以实例Sample4_1 为例,具体讲解模态对话框的创建步骤。

  1.创建对话框类

  按照4.1 节所述的方法创建对话框类和对话框资源,Sample4_1 的对话框资源和对话框

  类在前面已经创建,这里不再详述。

  2.创建对话框类的实例并初始化

  首先创建对话框类的对象。在Sample4_1 中,为了在程序运行最开始完成登录功能,可

  以在主窗口创建时显示登录对话框。创建CLoginDialog 实例的过程如下:

  (1)在IDE 左侧工作区,单击“FileView”选项卡,展开Sample4_1 files 节点,然后展

  开Source Files 节点,双击其中的MainFrm.cpp 文件,进入MainFrm.cpp 编辑界面,在文件头

  部其他#include 语句加入下面的包含语句:

  #include "LoginDialog.h"

  (2)在IDE 左侧工作区,单击“ClassView”选项卡,展

  松语文学免费小说阅读_www.16sy.com