zoukankan      html  css  js  c++  java
  • VC编程技术点滴(二)定义一个简单的对话框

    一、定义对话框资源

        继续上一节使用的程序例子。如下图所示,在程序资源视图中添加一个自定义的对话框:

     

    VC编程技术点滴(二)定义一个简单的对话框

        对话框比较简单,只是添加了一个编辑框控件和一个显示提示文字的静态文本控件,另外的OK按钮和Cancel按钮是系统自动添加的。

    二、定义对话框类

        有了对话框资源,还要定义一个与之关联的对话框类才可以使用。如下图所示定义对话框类:

     

    VC编程技术点滴(二)定义一个简单的对话框

     

        有了对话框类,为了使其它对象(如CSysMenuView对象)可以获取对话框中的控件信息,需要为对话框类添加一个公共成员变量,以保存编辑框的输入值。这里定义一个字符串变量name,如下图所示:

     

    VC编程技术点滴(二)定义一个简单的对话框

     

        获取对话框中编辑控件输入值的方法有多种,下图是通过定义编辑框控件的关联变量(控件的成员变量有两种类型,一种是值变量,保存用户输入;一种是控件变量,代表当前控件对象)m_Name来获取输入值:

     

    VC编程技术点滴(二)定义一个简单的对话框

     

        也可以实验一下定义一个编辑框的控件变量m_Edit,如下图所示:

    VC编程技术点滴(二)定义一个简单的对话框 

        为控件添加成员变量后,系统自动生成以下代码:

        //MyDialog.h

        ......

        class MyDialog : public CDialog
        {
           // Construction
           public:
              CString name;//前面定义的MyDialog类的公共成员变量,用于在对话框以外获取数据信息
              MyDialog(CWnd* pParent = NULL);   // standard constructor

           // Dialog Data
              //{{AFX_DATA(MyDialog)
              enum { IDD = IDD_DIALOG1 };
              CEdit m_Edit;
              CString m_Name;
              //}}AFX_DATA

        ......

        //MyDialog.cpp

        ......

        MyDialog::MyDialog(CWnd* pParent )
            : CDialog(MyDialog::IDD, pParent)
        {
           //{{AFX_DATA_INIT(MyDialog)
           m_Name = _T("");//在构造函数中初始化控件成员变量
           //}}AFX_DATA_INIT
        }

        //对话框数据交换函数
        void MyDialog::DoDataExchange(CDataExchange* pDX)
        {
           CDialog::DoDataExchange(pDX);
           //{{AFX_DATA_MAP(MyDialog)

           //关联编辑控件及其成员变量

           DDX_Control(pDX, IDC_EDIT1, m_Edit);
           DDX_Text(pDX, IDC_EDIT1, m_Name);
           //}}AFX_DATA_MAP
        }

        ......

        下面为对话框的OK按钮添加消息处理函数。可以在ClassWizard类向导中为对话框的OK按钮控件(编号IDOK)添加消息处理,也可以在对话框资源图中双击OK按钮添加消息。OK按钮的消息处理函数代码如下:

        void MyDialog::OnOK()
        {

           //第一种获取编辑框输入值的方法(IDC_EDIT1是编辑框编号ID),GetDlgItem是MFC类Cdialog集成

           //的Win32函数
           //GetDlgItem(IDC_EDIT1)->GetWindowText(name);

           //或者:

           //GetDlgItemText(IDC_EDIT1,name);

           //第二种方法
           //UpdateData(TRUE);//更新数据以使m_Name获取编辑框输入值
           //name=m_Name;

           //第三种方法,利用编辑框的控制变量m_Edit读取输入值

           m_Edit.GetWindowText(name);  

         
           CDialog::OnOK();
        }

    三、自定义对话框类的使用

        首先在主窗口的工具栏控件中添加一个按钮,点击该按钮将弹出自定义的对话框。如下图所示,在工具栏资源图中添加一个按钮位图:

    VC编程技术点滴(二)定义一个简单的对话框

        双击该按钮可以编辑它的控件编号等属性。

        如下图所示,在CSysMenuView视图类中添加按钮消息处理函数:

    VC编程技术点滴(二)定义一个简单的对话框

        在生成的OnBUTTONName()函数中添加如下代码:

        void CSysMenuView::OnBUTTONName()
        {
           // TODO: Add your command handler code here
           MyDialog myDia;//定义对话框类对象
           myDia.DoModal();//显示自定义对话框
           CClientDC mydc(this);
           mydc.TextOut(10,100,myDia.name);//获取并在窗口客户区显示对话框编辑控件的值
        }

  • 相关阅读:
    MySQL与Oracle 差异比较之七其它
    MySQL与Oracle 差异比较之七用户权限
    MySQL与Oracle 差异比较之六触发器
    MySQL与Oracle 差异比较之五存储过程&Function
    MySQL与Oracle 差异比较之四条件循环语句
    MySQL与Oracle 差异比较之三函数
    MySQL与Oracle 差异比较之二基本语法
    MySQL与Oracle 差异比较之一数据类型
    Nginx、fastCGI、php-fpm关系梳理
    RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)
  • 原文地址:https://www.cnblogs.com/luoshupeng/p/2146170.html
Copyright © 2011-2022 走看看