zoukankan      html  css  js  c++  java
  • MFC——对话框(一)

    创建对话框主要分两大步:

    1、创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;

    2、生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。

    一、对话框类的数据交换和检验

    在程序运行界面中,用户往往会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性改变后MFC会相应的修改控件关联变量的值。这种同步的改变是通过MFC对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫做对话框的数据交换和检验机制。

    如下:

     1 void CAdditionDlg::DoDataExchange(CDataExchange* pDX)   
     2 {   
     3     // 处理MFC默认的数据交换   
     4     CDialogEx::DoDataExchange(pDX);   
     5     // 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换   
     6     DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);   
     7     // 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换   
     8     DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);   
     9     // 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换   
    10     DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);   
    11 }  

    我们可以看到,在CAdditionDlg类中的DaDataExchange()函数里,

    ID为IDC_SUMMAND_EDIT的控件与变量m_editSummand关联在一起,彼此可以进行数据交换,

    同样,IDC_ADDEND_EDIT的控件与m_editAddend变量关联,IDC_SUM_EDIT控件与m_editSum变量关联。

    但是,这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()

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

    BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

    参数bSaveAndValidate用于指示数据传输的方向。 

    UpdateData(TRUE)时,是由控件传给变量;

    UpdateData(FALSE)时,是由变量传给控件。

    返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE

    二、为控件添加消息处理函数

    双击按钮(或者在按钮上点右键,选择‘Add Event Handler...’),MFC会自动为其在类中添加BN_CLICKED消息的处理函数OnBnClickedAddButton()

    如下例:

     1 void CAdditionDlg::OnBnClickedAddButton()   
     2 {   
     3     // TODO: Add your control notification handler code here   
     4     // 将各控件中的数据保存到相应的变量   
     5     UpdateData(TRUE);   
     6   
     7     // 将被加数和加数的加和赋值给m_editSum   
     8     m_editSum = m_editSummand + m_editAddend;   
     9   
    10     // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值   
    11     UpdateData(FALSE);   
    12 }  

    UpdateData(TRUE),作用是将控件中数据保存至变量

    m_editSum = m_editSummand + m_editAddend; 进行加法运算

    UpdateData(FALSE),作用是将变量值更新至控件

  • 相关阅读:
    进程管理
    linux进程间的通信方式
    linux进程调度的算法
    安装haroopad
    SAE部署Java应用
    Jetty 8.1 安装 运行 部署
    javaweb学习总结(五)——Servlet开发(一)
    eclipse打war包
    Java基础学习总结——Java对象的序列化和反序列化
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
  • 原文地址:https://www.cnblogs.com/may1016/p/5521896.html
Copyright © 2011-2022 走看看