对话框中控件的几种访问方法

1、通过相关函数进行访问

CWnd::GetDlgItem 通常通过控件的Id来获取指向控件的指针,以便进一步对控件的操作

CWnd::GetWindowText获取一个窗体的caption或者控件上的文本

CWnd::SetWindowText Sets thewindow’s title to the specified text. If the window is a control, the textwithin the control is set

 

代码如下:  

     int num1,num2,num3;
     char ch1[10],ch2[10],ch3[10];

     GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);

     GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

     num1=atoi(ch1);
     num2=atoi(ch2);
     num3=num1+num2;
     itoa(num3,ch3,10);

     GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

CWnd::GetDlgItemText 其功能相当于CWnd::GetDlgItem和CWnd::GetWindowText的总功能

CWnd::SetDlgItemText  其功能相当于CWnd::SetDlgItem和CWnd::SetWindowText的总功能

 

代码如下:

     int num1,num2,num3;
     char ch1[10],ch2[10],ch3[10];

     GetDlgItemText(IDC_EDIT1,ch1,10);
     GetDlgItemText(IDC_EDIT2,ch2,10);

     num1=atoi(ch1);
     num2=atoi(ch2);
     num3=num1+num2;
     itoa(num3,ch3,10);

     SetDlgItemText(IDC_EDIT3,ch3);


 

对静态文本框进行操作的代码如下:

voidCTestDlg::OnNumber1()

{

       // TODO: Add your control notificationhandler code here

       CString str;

       if(GetDlgItem(IDR_NUMBER1)->GetWindowText(str),"Number1:"==str)

       {

              GetDlgItem(IDR_NUMBER1)->SetWindowText("数值1:");

       }

       else

       {

              GetDlgItem(IDR_NUMBER1)->SetWindowText("Number1:");

       }

}


 

Remarks:

因为静态文本框主要是用来显示文本的,一般不对其进行事操作,所以微软默认的将所有的静态文本框的Id统一设置成IDC_STATIC,如果非要对静态文本框进行操作,首先需要更改其id,其次需要将其styles属性中的notify(通告)勾上,勾上之后才能产生通告消息(消息非为标准消息,命令消息和通告消息)

对于逗号表达式,形如x1,x2,x3…….xn其执行的顺序是从左到右的顺序依次执行,整个逗号表达式的值是最后一个表达式xn的值。

 

CWnd::GetDlgItemInt  根据控件的Id来获取控件上的数值型文本

CWnd::SetDlgItemInt  将一个整型数设置到控件上

代码如下:

     int num1,num2,num3;

     num1=GetDlgItemInt(IDC_EDIT1);
     num2=GetDlgItemInt(IDC_EDIT2);

     num3=num1+num2;

     SetDlgItemInt(IDC_EDIT3,num3);


 

2、通过将一个变量与控件相关联对控件进行操作,该变量可以是一般类型的变量,也可以是控件类型的变量。具体方法是按快捷键Ctrl+W键唤出classwizard,选中membervariables选项卡,通过控件id来添加与控件相关联的变量,当我们将变量与控件相关联之后你会发现代码

voidCTestDlg::DoDataExchange(CDataExchange* pDX)

{

       CDialog::DoDataExchange(pDX);

       //{{AFX_DATA_MAP(CTestDlg)

       DDX_Text(pDX, IDC_EDIT1, m_num1);

       DDX_Text(pDX, IDC_EDIT2, m_num2);

       DDX_Text(pDX, IDC_EDIT3, m_num3);

       //}}AFX_DATA_MAP

}


其中的注释宏中的DX_Text()函数的作用就是将变量与指定控件相关联,像以的DDX_(Dialog data enxchange)和以DDV_(Dialog data valid)开头的函数有很多,他俩一个是对话框数据交换一个是对话框数据校验,作用都是将变量与各种类型的相关的控件关联,这里就不赘述了,详情请看MSDN,

你还会发现在对话框类中的构造函数中将变量进行初始化了(看注释宏之间的代码)

CTestDlg::CTestDlg(CWnd*pParent /*=NULL*/)

       : CDialog(CTestDlg::IDD, pParent)

{

       //{{AFX_DATA_INIT(CTestDlg)

       m_num1 = 0;

       m_num2 = 0;

       m_num3 = 0;

       //}}AFX_DATA_INIT

       m_bIsCreated=FALSE;

}


注意:要想使从控件上输入的数字赋值到相关联的变量上,必须调用CWnd::UpdateData函数,并且设置参数为TRUE,也可以不设置,因为其缺省值是TRUE,当对数值操作结束后还需要在调用一次,这一次需要将参数设置成   FALSE如下代码

voidCTestDlg::OnBtnAdd()

{

      // TODO: Add your control notificationhandler code here

/*   if (!m_bIsCreated)//该判断语句也可以是!m_btn.m_hWnd,使用m_btn对象中的成员变量判断句柄是否有值

      {

           m_btn.Create("feiyan",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,

                 CRect(0, 0, 100, 50), this,123);    //在对话框上动态添加一个按钮

           m_bIsCreated = TRUE;       //判断是否已经创建了按钮,是的话销毁,现点击可再重新创建

      }

      else

      {

           m_btn.DestroyWindow();     //销毁窗口,因为按钮也是从CWnd继承来

           m_bIsCreated = FALSE;

      }

      */

      UpdateData();

      m_num3=m_num1+m_num2;

      UpdateData(FALSE);


}


 

3、通过SendMessage函数发送一个WM_GETTEXT和WM_SETTEXT消息来获取和设置对话框文本,其中::SendMessage函数可以是Win32API函数,也可以是CWnd::SendMessage

代码如下:

     int num1,num2,num3;
     char ch1[10],ch2[10],ch3[10];

//::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

     //::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

     //GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

     m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

     m_edit2.SendMessage(WM_GETTEXT,10,(LPARAM)ch2);

     num1=atoi(ch1);
     num2=atoi(ch2);
     num3=num1+num2;
     itoa(num3,ch3,10);

     m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);


4、通过CWnd::SendDlgItemMessage函数发送一个WM_GETTEXT和WM_SETTEXT消息来获取和设置对话框文本,该函数相当于上述的CWnd::SendMessageCWnd::GetDlgItem 功能的集合

 

代码如下:

     int num1,num2,num3;

     char ch1[10],ch2[10],ch3[10];

     SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);

     SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);


     num1=atoi(ch1);
     num2=atoi(ch2);
     num3=num1+num2;
     itoa(num3,ch3,10);

     SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);

 

//下面两行代码是用来设置复选内容的,详情查EM_SETSEL和EM_GETSEL

SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);

     m_edit3.SetFocus();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值