zoukankan      html  css  js  c++  java
  • MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

                MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法.

    一丶按钮.静态文本的通用属性.

      他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 

    创建一个MFC Dlg对话框.

    关于对话框的标题.我们都可以在他们各自的属性中设置.

    也可以设置自己特有的ID.比如编辑框举例

    常用的API:

      1.根据控件ID.获取控件的标题名称.

      GetDlgItemText(控件ID,字符串缓冲区);

      2.根据控件ID.设置控件的标题.

      SetDlgItemText(控件ID.字符串);

    二丶编写代码.获取编辑框中的字符串的个数.

     双击按钮.我们可以响应按钮点击消息.在按钮点击消息中获取编辑框的内容.并且设置到静态文本上.

    PS: 我们需要都要设置这个控件的ID.否则无法使用API获取.

    PS: 我们如果在MFC中使用API .需要加上全局访问符号.::  也就是四饼. 否则就是使用MFC自带的 封装的API

    不过此时我们上面所说的API.就是使用的MFC封装的.比较方便..

    void CButtonAnEditAnStaticTextDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        CString str;
        GetDlgItemText(EDT_SHOWVALUE, str); //获取编辑框的内容.结果放到str缓冲区中.
    
        //统计字符个数.以及自己.
        int nlen = 0;
        nlen = str.GetLength();            //获取缓冲区的长度.给nlen
        
        CString OutPut;
        OutPut.Format(TEXT("字符串长度 = %d "), nlen);//格式化字符串.给Output.
        //设置到静态文本框
        SetDlgItemText(IDC_STATIC, OutPut);         //将设置好的字符串.设置到文本框中.
    }

    应用程序截图:

     三丶访问控件的七种方法.

    上面我们已经使用了一种了. GetDlgItemText() 根据指定控件ID获取控件文本.

    3.1   控件ID访问方法.

       GetDlgItem(控件ID)

      GetWindowsText(缓冲区.大小.)

     代码示例:

        

    void CMFCApplication1Dlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        int nNum1, nNum2, nNum3;
        TCHAR ch1[12], ch2[12], ch3[12];
        //第一种方法.通过控件ID.获取文本.
        GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,12);
        GetDlgItem(IDC_EDIT2)->GetWindowText(ch2, 12);
    
        //字符串变为数字.通用版.
        nNum1 = _ttoi(ch1);                                                                                                                    
        nNum2 = _ttoi(ch2);
        nNum3 = nNum1 + nNum2;
    
        //数字转为字符串.设置到编辑框三种.
        _itot(nNum3, ch3, 10); //十进制转换.
        GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
    }

    上面是MFC封装好了.所以我们可以 ->继续调用.如果是自己使用Windows API编写.那么需要 ::GetDlgItem(指定窗口的句柄,控件ID)获取根据控件ID寻找的窗口句柄.然后自己继续调用 ::GetWindowText(句柄.缓冲区) 来进行获取.

    具体原理可以自己看下源代码.不再多少.

    应用截图:

      

    3.2GetDlgItemText() 获取.

      

    void CMFCApplication1Dlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        int nNum1, nNum2, nNum3;
        TCHAR ch1[12], ch2[12], ch3[12];
        //第一种方法.通过控件ID.获取文本.
        GetDlgItemText(IDC_EDIT1, ch1, 12);
        GetDlgItemText(IDC_EDIT2, ch2, 12);
    
        //字符串变为数字.通用版.
        nNum1 = _ttoi(ch1);                                                                                                                    
        nNum2 = _ttoi(ch2);
        nNum3 = nNum1 + nNum2;
    
        //数字转为字符串.设置到编辑框三种.
        _itot(nNum3, ch3, 10); //十进制转换.
        SetDlgItemText(IDC_EDIT3, ch3);
    }

       前两种方法获得是字符串.然后自己要互相转换.

    3.3. 使用方法三.直接获取整形.

      代码如下

      int nNum1, nNum2, nNum3;
        nNum1 = GetDlgItemInt(IDC_EDIT1);
        nNum2 = GetDlgItemInt(IDC_EDIT2);
    
        nNum3 = nNum1 + nNum2;
    
        SetDlgItemInt(IDC_EDIT3,nNum3);

    3.4 控件跟整形变量关联. Value类型

    如果使用这个方法.那么我们的控件需要绑定一个变量.使用这个变量来获取跟设置.

    编辑框 - > 类向导 -> 添加变量   给编辑框进行关联.

    三个依次关联即可.

    使用的时候需要用到一个函数. 

    UpdateData(True) 或者 False

    TRUE. 则把控件里面的数据.关联到变量里. 简单理解为就是获取数据.调用了这个.那么我们绑定的变量就会有数据了.

    FALSE: 数据设置到控件中. 当我们使用完变量则需要将数据设置到控件里显示.就用FALSE.

    具体代码如下:

      

    UpdateData(TRUE) ; //获取数据到变量中
    m_EdtNum3 = m_EdtNum1 + m_EdtNum2;
    UpdateData(FALSE); //设置变量的数据到控件中.

    使用的时候他会自己检查是否是整数.

    原理.

    DoDataExChange函数. 

    在MFC中有一个这种函数. 用来跟关联变量的设置的.

    DDX_Text 是跟变量关联了.

    DDV开头的则是检查的.

    void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, int& value);
    参数1: pdx
    参数2: 控件ID
    参数3: 控件关联的变量.

     我们可以F12跟进看到很多这种类型.

    3.5 把控件跟控件变量关联. Edit类型.我们可以跟控件关联

     

    这个就可以当控件使用了.

    我们给编辑框关联的.那么查询MSDN可以看到控件的操作方法.

    如果获取字符串可以使用这两个函数.获取跟设置. 也可以设置编辑框的最大字符数. 或者最小字符数.等等.具体查询MSDN

    m_Edit.GetWindowText();
    m_Edit.SetWindowText();

    3.6发送消息进行控件操作.

    MFC中都是消息驱动的.那么我们也有API可以进行发消息操作.

    ::SendMessage(控件id的句柄,消息类型,大小.附加参数.)

    ::SendMessage(GetDlgItem(EDT_EDIT)->m_hWnd,WM_GETTEXT,12,(LPARAM)ch1);
    
    参数2: 消息类型.我们WM_GETTEXT 是代表我要获取这个文本.
    参数3: 12 是缓冲区的长度.
    参数4: 缓冲区.
    
    其中3 4 是额外附加参数.什么意思? 就是说这个参数不确定.可以自己给定.
    我们解析的时候按照对应类型解析即可. 你可以给数组.也可以给结构体.都是可以的.

    设置字符串.

    ::SendMessage(Getdlgitem(IDC_EDT3),WM_SETTEXT,0,(LPARAM)ch3);

    这个方法需要掌握.一般写windows程序.这个函数会常用.

    3.7 根据方法6合并的一个函数

    SendDlgItemMessage(控件ID.WM_GETTEXT,附加参数,附加参数);
    
    //使用例子
    
    SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,12,(LPARAM)ch1);
    设置字符串
    SendDlgItemMessage(IDC_EDIT1,WM_SETTEXT,0,(LPARAM)ch3);

    具体代码:

      

      

  • 相关阅读:
    关于ligerui 中 grid 表格的扩展搜索功能在远程数据加载时无法使用的解决办法
    关于ligerUI中ligerTree代码中的一个bug,造成该控件无法通过url的POST方式加载数据
    通过注册表控制软件可否运行
    SQL 分组后获取其中一个字段最大值的整条记录
    sqlserver2005唯一性约束
    正则表达式
    关于AfterLogic WebMail 的.net版无法上传控件的解决办法
    使用openrowset跨库查询
    [转载]SQL字符串处理函数大全
    Tomcat 内存和线程配置优化
  • 原文地址:https://www.cnblogs.com/iBinary/p/9652668.html
Copyright © 2011-2022 走看看