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