学习了孙鑫老师的视频,感悟很深,总结了一下对话框控件访问的七种方式
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(); } 此时,计算结果会被自动复选上
|