现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

7种访问对话框控件的方式

2012-09-05 11:10 工业·编程 ⁄ 共 3560字 ⁄ 字号 暂无评论

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直接对对话框的子控件发送消息

给我留言

留言无头像?