在对话框控件访问的七种方法(1)、(2)中介绍了对话框空间访问的第一类和第二类方法,下面介绍对话框控件访问的第三类方法:
在Windows程序设计中,基于对话框的程序设计,对对话框上控件的访问有多种方法。在这里我总结七种方法,但这七种方法我可以把他们分为三大类。下面通过一个小示例演示对话框控件访问的几种方法:
上图为一个小的对话框应用程序的示例程序,实现的功能是:分别在Number1和Number2所标示的编辑框中输入数字,当点击Add按钮时,将Number1和Number2所标示的编辑框中的数字进行相加,将求和结果写到Number3所标示的编辑框中。
要想将两个编辑框中的数字进行相加,首先要定位到对应的控件,然后获取控件上的文本,最后输出到第三个编辑框控件上。下面就具体介绍几种访问控件的方法:
第三类方法:
Windows程序都是基于消息的,编辑框也属于窗口。我们可以通过向操作系统发送WM_GETTEXT和WM_SETTEXT消息,来获得控件上的文本与设置控件上的文本。从而访问对话框控件。
方法6:
我们可以调用Windows的API函数::SendMessage()来发送WM_GETTEXT和WM_SETTEXT消息。当然我们也可以调用CWnd类的成员函数来发送WM_GETTEXT和WM_SETTEXT消息,原因是编辑框控件也属于窗口。具体实现如下:
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);
方法7:
上述的方法6中的通过调用CWnd类的成员函数SendMessage()函数来发送消息时,都要先获得控件的指针或者用与控件相关联的对象调用其成员函数。我们也可以用CWnd类的另一个成员函数SendDlgItemMessage()函数来发送消息,这个函数可以看成是方法6的两个步骤的结合。例如:
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);
以上的七种方法是访问控件的几种常用方法。第一类方法:先获得对话框控件的指针人后调用CWnd的成员函数访问控件是最主要最基本的访问方法。第二类方法:通过关联变量或对象,可以简化代码的书写,是一种聪明的访问方法。第三类方法:发送消息,这需要对Windows程序的运行机制比较熟悉,有利于理解Windows程序的内部运行机制。