7种访问对话框控件的方式,他们分别是:
·GetDlgItem()->Get(Set)WindowText()
·Get(Set)DlgItemText()
·Get(Set)DlgItemInt()
·将控件与整型变量相关联()
·将控件与控件变量相关联
·DendMessage()
·SendDlgItemMessage()
下面以一个对话框上的两个编辑框(IDC_EDIT1和IDC_EDIT2)的求和放到第三个编辑框(IDC_EDIT3)上为例进行说明(他们的ID分别为IDC_EDIT1,IDC_EDIT2和IDC_EDIT3):
⑴. 用CWnd的成员变量GetDlgItem->GetWindowText和
GetDlgItem->SetWindowText实现:
void CDialogDlg::OnBnClickedButton3()
{
// TODO: Add your control notification handler code here
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];//定义3个大小为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);//为了显示,将数值转化为文本,第三个参数10表示转换的进制,这里是十进制
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
}
⑵. 用CWnd的成员变量GetDlgItemText和SetDlgItemText实现:
void CDialogDlg::OnBnClickedButton3()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];//定义3个大小为10的字符数组
GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);
num1 = atoi(ch1);//为了求和,必须将字符形式(文本)的内容转为数值
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);//为了显示,将数值转化为文本,第三个参数10表示转换的进制,这里是十进制
SetDlgItemText(IDC_EDIT3,ch3);
}
⑶. 使用GetDlgItemInt和SetDlgItemInt
void CDialogDlg::OnBnClickedButton3()
{
int num1,num2,num3;
num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3,num3);
}
⑷. 将三个编辑框关联三个成员变量(Value),通过成员变量来检索和设置编辑框的文本(最简单最常用访问控件的方式)
将IDC_EDIT1关联变量为m_num1,变量类别为Value,变量类型为int。还可以限定输入数值的范围,这样在三个地方加了代码:
①.头文件中定义:
public:
int m_num1;
int m_num2;
int m_num3;
②.源文件的构造函数中(对成员变量初始化):
CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDialogDlg::IDD, pParent)
, m_num1(0)
, m_num2(0)
, m_num3(0)
这样运行后三个都默认为0了
③.源文件中的DoDataExchange函数,这个函数由程序框架调用,完成对话框数据的交换和效验。调用DDX_TEXT函数,这个函数就是实现对话框控件和类成员变量的关联的。
void CDialogDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_num1);
DDV_MinMaxInt(pDX, m_num1, 0, 100);
DDX_Text(pDX, IDC_EDIT2, m_num2);
DDX_Text(pDX, IDC_EDIT3, m_num3);
}
既然已经关联成员变量了,那就是在函数中相加就好了。另外还要加上UpdateData函数,UpdateData(TRUE)——刷新控件的值到对应的变量。即:控件的值—>变量。UpdateData(FALSE) —— 拷贝变量值到控件显示。 即:变量值—>控件显示。
void CDialogDlg::OnBnClickedButton3()
{
UpdateData();
m_num3 = m_num1 + m_num2;
UpdateData(FALSE);
}
这样就OK了,此时若是输入的不是int型数据(如“你好”),会跳出对话框“请输入一个整数”。
⑸. 关联三个控件变量(及代表控件本身),如为IDC_EDIT1关联控件变量m_edit1,变量类别为Control,变量类型为CEdit
因为这些控件变量代表的就是控件本身,并且CEdit类派生于CWnd类,所以可以调用GetWindowText和SetWindowText来获取和设置编辑框的本文。
void CDialogDlg::OnBnClickedButton3()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];//定义3个大小为10的字符数组
m_edit1.GetWindowText(ch1,10);
m_edit2.GetWindowText(ch2,10);
num1 = atoi(ch1);//为了求和,必须将字符形式(文本)的内容转为数值
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);//为了显示,将数值转化为文本,第三个参数10表示转换的进制,这里是十进制
m_edit3.SetWindowText(IDC_EDIT3,ch3);
}
⑹. 获取和设置窗口文本的消息,通过SendMessage来发消息,从而获取设置文本。Window系统中,获取窗口文本的消息是WM_GETTEXT,设置时SETTEXT。以下就用Platform SDK的SendMessage函数,通过发送WM_GETTEXT消息获取文本,转为相应的数值相加,结果转化为字符串,再发送WM_SETTEXT消息,将字符串设置到第三个上。
void CDialogDlg::OnBnClickedButton3()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];//定义个大小为的字符数组
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
::SendMessage(m_edit2.m_hWnd, 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);
}
⑺. 用SendDlgItemMessage直接对对话框的子控件发送消息