您的位置:首页 > 其它

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

2015-04-16 18:53 218 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: