爱国者游戏 电影 百度:VC学习日记:对话框控件访问的七种方式
来源:百度文库 编辑:偶看新闻 时间:2024/05/05 01:08:14
学习了孙鑫老师的视频,感悟很深,总结了一下对话框控件访问的七种方式
1. 点击静态文本改变其内容
当静态文本框需要响应消息时,许将其ID号改为不同值。首先要获取现在的静态文本框控件的文本内容:GetWindowText,其过程中,GetDlgItem:用来获取一个
指定控件的指针,返回一个CWnd指针;(注意:静态文本框属性里将Notify选中,否则无法接收消息响应)
void CTestDlg::OnNumber1()
{
CString str;
if(GetDlgItem(IDC_NUMBER1)->GetWindowText(srt),str=="Number1:") //整个逗号表达式前半部分的值,是后半部分的值,后半部分是个判断语句。
如果srt=1返回真
{
GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:");
}
else
{
GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");
}
}
————————————————————————————————————————————
2. GetDlgItem()->Get(Set)WindowText()
将两编辑框(1,2)中输入的数字相加,在另一编辑框中显示
首先要先获取编辑框1和2的内容,然后将字符内容转换为整型(atoi),相加后再itoa回字符串,显示
{
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); //最后一个参数10是10进制,不是num3的长度
SetDlgItemText(IDC_EDIT3,ch3);
}
————————————————————————————————————————————
3. GetDlgItemInt()/SetDlgItemInt()(可用于有/无符号数的加减)
{
int num1,num2,num3;
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);
num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);
}
————————————————————————————————————————————
4. 将控件和整型变量相关联
这种方法是最简单的方法:
将三个编辑框关联三个成员变量(Member Variables),用ClassWizard,Add Variable,n_num1,变量类型选为int(此时可设定变量范围)
然后在OnBtnAdd()中
{
UpdateData(); //模态对话框,要调用UpdateData
m_num3=m_num1+m_num2;
UpdateData(FALSE);
}
————————————————————————————————————————————
5. 将控件和控件变量相关联
控件关联控件,在ClassWizard中,增加成员变量,Category选择控件(Control)
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
m_edit1.GetWindowText(ch1,10); //控件调用控件
m_edit2.GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
m_edit3.SetWindowText(ch3);
}
————————————————————————————————————————————
6. SendMessage()
采用发送消息,在MFC编程中几乎不用,在SDK编程中经常用到
{
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); //关联了m_edit1,直接用
//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1); //直接利用控件变量来调用SendMessage
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. SendDlgItemMessage()
{
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);
SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1); //通过获取复选的开始和结束位置
m_edit3.SetFocus();
}
此时,计算结果会被自动复选上