在Windows程序设计中,基于对话框的程序设计,对对话框上控件的访问有多种方法。在这里我总结七种方法,但这七种方法我可以把他们分为三大类。下面通过一个小示例演示对话框控件访问的几种方法:
上图为一个小的对话框应用程序的示例程序,实现的功能是:分别在Number1和Number2所标示的编辑框中输入数字,当点击Add按钮时,将Number1和Number2所标示的编辑框中的数字进行相加,将求和结果写到Number3所标示的编辑框中。
要想将两个编辑框中的数字进行相加,首先要定位到对应的控件,然后获取控件上的文本,最后输出到第三个编辑框控件上。下面就具体介绍几种访问控件的方法:
一、第一类方法:
这类方法是通过调用CWnd类的成员函数来访问对话框控件。
方法一:调用CWnd类的成员函数GetDialogItem()和GetWindowText()以及SetWindowText()函数来实现。
函数功能:CWnd* GetDlgItem( int nID ) ,通过参数传递某一控件的ID,该函数返回一个指向该控件的指针;
int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ),该函数获得指定控件上的文本信 息,并将其保存在缓冲区lpszStringBuf中,nMaxCount 指定缓冲区的最大值。通过以上两个函数就可以访问对话框上指定控件的信息。
void SetWindowText( LPCTSTR lpszString );该函数用心的字符串信息写入指定控件的文本区。
示例代码如下:
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()来实现预定功能。
函数功能:int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ),该函数相当于函数GetDialogItem()和GetWindowText()的组合。当然写入文本信息也有相对应的函数void SetDlgItemText( int nID, LPCTSTR lpszString );
示例代码如下:
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);
方法三:调用CWnd类的GetDlgItemInt()成员函数实现上述功能。方法一和二的GetWindowText()和GetDlgItenText()函数获得的知识控件的文本信息,如果想对数字进行相加运算,还得将字符转化成数值。CWnd类的UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE )成员函数直接获得控件的字符信息并将其转化为数值。当然写会数值也有相对应的函数 void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE );
示例代码如下:
int num1,num2,num3;
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);
num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);
以上三种方法是访问对话框控件的第一类方法,都是通过调用Cwnd类的成员函数实现的,基本思想都是通过控件的ID先获得对话框上的控件,然后访问控件的信息,对控件做各种操作。原理是一样的,只是不同的函数功能不一。
基于篇幅有限,将在Windows程序设计 访问对话框控件的七种方法(2)中介绍第二类访问控件的方法:将控件关联相应的变量来对其访问和操作。