學習了孫鑫老師的視頻,感悟很深,總結了一下對話框控件訪問的七種方式
1. 點擊靜態(tài)文本改變其內(nèi)容
當靜態(tài)文本框需要響應消息時,許將其ID號改為不同值。首先要獲取現(xiàn)在的靜態(tài)文本框控件的文本內(nèi)容:GetWindowText,其過程中,GetDlgItem:用來獲取一個
指定控件的指針,返回一個CWnd指針;(注意:靜態(tài)文本框?qū)傩岳飳otify選中,否則無法接收消息響應)
void CTestDlg::OnNumber1()
{
CString str;
if(GetDlgItem(IDC_NUMBER1)->GetWindowText(srt),str=="Number1:") //整個逗號表達式前半部分的值,是后半部分的值,后半部分是個判斷語句。
如果srt=1返回真
{
GetDlgItem(IDC_NUMBER1)->SetWindowText("數(shù)值1:");
}
else
{
GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");
}
}
————————————————————————————————————————————
2. GetDlgItem()->Get(Set)WindowText()
將兩編輯框(1,2)中輸入的數(shù)字相加,在另一編輯框中顯示
首先要先獲取編輯框1和2的內(nèi)容,然后將字符內(nèi)容轉(zhuǎn)換為整型(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); //最后一個參數(shù)10是10進制,不是num3的長度
SetDlgItemText(IDC_EDIT3,ch3);
}
————————————————————————————————————————————
3. GetDlgItemInt()/SetDlgItemInt()(可用于有/無符號數(shù)的加減)
{
int num1,num2,num3;
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);
num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);
}
————————————————————————————————————————————
4. 將控件和整型變量相關聯(lián)
這種方法是最簡單的方法:
將三個編輯框關聯(lián)三個成員變量(Member Variables),用ClassWizard,Add Variable,n_num1,變量類型選為int(此時可設定變量范圍)
然后在OnBtnAdd()中
{
UpdateData(); //模態(tài)對話框,要調(diào)用UpdateData
m_num3=m_num1+m_num2;
UpdateData(FALSE);
}
————————————————————————————————————————————
5. 將控件和控件變量相關聯(lián)
控件關聯(lián)控件,在ClassWizard中,增加成員變量,Category選擇控件(Control)
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
m_edit1.GetWindowText(ch1,10); //控件調(diào)用控件
m_edit2.GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
m_edit3.SetWindowText(ch3);
}
————————————————————————————————————————————
6. SendMessage()
采用發(fā)送消息,在MFC編程中幾乎不用,在SDK編程中經(jīng)常用到
{
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); //關聯(lián)了m_edit1,直接用
//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1); //直接利用控件變量來調(diào)用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();
}
此時,計算結果會被自動復選上