zoukankan      html  css  js  c++  java
  • 对话框基础知识(二)--访问控件的五种方式

    背景描述:

           我们用实现这样的一个功能,在Num1和Num2编辑框中输入数据,点击求和按钮后,在Sum编辑框中显示这两个数的和,对话框界面如图1所示。

    准备事项:

          1.添加与这个对话框相关联的类,具体方法参见《对话框基础知识(一)》;

          2.从工具箱从拖拽3个编辑框控件和3个文本控件,同时增加一个“求和”按钮

          3.在所关联的对话框类中响应“求和”事件,完成算数功能,右键按钮添加“BN_CLICKED”类型的事件处理函数。

                                               图1 求和对话框


    本文就这个功能提供五种实现方式,下面一一展开:


    方式一


    void CTestDlg::OnButtonAdd()
    {
        // TODO: 在此添加控件通知处理程序代码
        //公共部分代码
        char szNumber1[11] = {0};
        char szNumber2[11] = {0};
        char szSum[11] = {0};
        int nNum1 = 0;
        int nNum2 = 0;
        int nSum  = 0;
    
        //方法一:
        //得到编辑框字符串
        GetDlgItem(IDC_EDIT_NUM1)->GetWindowText(szNumber1, 10);
        GetDlgItem(IDC_EDIT_NUM2)->GetWindowText(szNumber2, 10);
        //字符转换
        nNum1 = atoi(szNumber1);
        nNum2 = atoi(szNumber2);
        //求和
        nSum = nNum1 + nNum2;
        //数组转换为字符串
        _itoa_s(nSum, szSum, 10);//转换为10进制
        //设置编辑框,显示结果
        GetDlgItem(IDC_EDIT_SUM)->SetWindowText(szSum);
    }

    接口说明:

    CWnd* GetDlgItem( int nID ) const;

    说明:
    获得对话框中指定控件的指针。返回的指针通常被强制转换为nID所标识的控件类型。

    int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
    void GetWindowText( CString& rString ) const;
    说明:
    GetWindowText拷贝控件内的文本到字符缓冲区
    void SetWindowText( LPCTSTR lpszString );
    说明:
    SetWindowText设置控件内的文本。

    方式二


        //方法二:
        //得到编辑框字符串
        GetDlgItemText(IDC_EDIT_NUM1,szNumber1, 10);
        GetDlgItemText(IDC_EDIT_NUM2,szNumber2, 10);
        //字符转换
        nNum1 = atoi(szNumber1);
        nNum2 = atoi(szNumber2);
        //求和
        nSum = nNum1 + nNum2;
        //数组转换为字符串
        _itoa_s(nSum, szSum, 10);
        SetDlgItemText(IDC_EDIT_SUM, szSum);

    
    接口说明:
    

    int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
    int GetDlgItemText( int nID, CString& rString ) const;
    说明:
    获得与对话框中的控件相关的标题或文本
    void SetDlgItemText( int nID, LPCTSTR lpszString );
    说明:
    设置窗口或对话框拥有的标题或是控件文本

    方式三


        //方法三:
        //得到经转换的编辑框数字
        nNum1 = GetDlgItemInt(IDC_EDIT_NUM1);
        nNum2 = GetDlgItemInt(IDC_EDIT_NUM2);
        //求和
        nSum = nNum1 + nNum2;
        //显示编辑框结果
        SetDlgItemInt(IDC_EDIT_SUM, nSum, TRUE);
    接口说明:

    UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE )const;
    说明:
    它将给定对话框中指定控件的文本转换为整数
    void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE );
    说明:
    对话框中给定控件的文本设为代表指定整数值的字符串


    方式四


    该方法使用向对话框关联数据成员来实现,我们将三个编辑框分别和对话框类的三个成员变量相关联,然后通过这些成员变量来检索和设置编辑框的文本,这是最简单的访问控件的方式,添加步骤如下:

    选择控件->鼠标右键->添加变量->l类型选择(Value),变量类型选择(int),如图2所示。


                                                         图2 绑定类型

    我们需要添加的代码如下:

        //方法四:
        UpdateData(TRUE);//数据获取,两个变量值更新为用户输入的值
        m_nTotal = m_nNum1 + m_nNum2;
        UpdateData(FALSE);//初始化控件,显示结果
    当我们成员变量的添加,我们实际需要编写的代码就特别少,下面分析MFC如何完成数据更新和显示的基本原理。


    当我们完成成员变量和控件的关联,MFC向导会向DoDataExchange函数中添加一部分代码,以完成对话框数据交换和校验,该函数有MFC框架调用。

    void CTestDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
    
        DDX_Text(pDX, IDC_EDIT_NUM1, m_nNum1);//以下都是新增代码,DDX_TEXT完成指定控件和特定成员变量的关联
        DDV_MinMaxInt(pDX, m_nNum1, -99, 99); //数据运行输入的范围
        DDX_Text(pDX, IDC_EDIT_NUM2, m_nNum2);
        DDV_MinMaxInt(pDX, m_nNum2, -99, 99);
        DDX_Text(pDX, IDC_EDIT_SUM, m_nTotal);
    }
    DoDataExchang接口声明如下:

    virtual void DoDataExchange( CDataExchange* pDX );
    说明:
    框架调用这个函数以交换并校验对话框数据。
    我们不要直接调用这个函数。它是由UpdateData成员函数所调用的。我们可调用UpdateData函数以初始化对话框控件或从对话框获取数据。

    UpdateData接口声明如下:

    BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
    说明:

    bSaveAndValidate = FALSE,初始化对话框(FALSE),更新界面值
    bSaveAndValidate = TRUE ,从对话框获取数据(TRUE)

    小知识点:
    Dialog Data Exchange 对话框数据交换
    Dialog Data Validation 对话框数据校验
    MFC提供了多种DDX_为前缀的函数,这些函数均是用来不同控件的数据交换。


    方式五


    第五种方式我们将编辑框控件和一个变量相关联,这里我们关联的变量是控件变量,这些控件变量代表的是控件本身。由于编辑框控件是用类CEdit来描述,而CEdit类派生于CWnd类。因此,我们可以直接使用GetWindowText和SetWindowsText函数来完成数据的获取和更新。使用的内容和方法四类似,只是添加变量的类型是Control


                                                             图3 添加控件类型

    具体代码如下:

        m_Edit1.GetWindowText(szNumber1, 10);
        m_Edit2.GetWindowText(szNumber2, 10);
        nNum1 = atoi(szNumber1);
        nNum2 = atoi(szNumber2);
        nSum = nNum1 + nNum2;
        _itoa_s(nSum, szSum, 10);
        m_EditSum.SetWindowText(szSum);

    五种方式的运行效果:



  • 相关阅读:
    使用JavaWeb实现文件的上传和下载
    IDEA使用Maven创建Web项目的两种方式
    Window10系统下联想笔记本进入BIOS界面方法
    MarkDown语法
    PV-UV-QPS
    expect 安装 salt 客户端
    fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令
    查看CPU 内存 硬盘 网络 查看进程使用的文件 uptime top ps -aux vmstat iostat iotop nload iptraf nethogs
    rpm 命令使用 和 lsof -p 1406 使用
    salt 执行shell 脚本 修改名字
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468369.html
Copyright © 2011-2022 走看看