2016.09.05編輯框控件使用
--------------------------------------
GetDlgItemText函數傳回對話框中指定ID的控件上的文本。
結合了GetDlgItem和GetWindowsText函數功能。
SetDlgItemText函數將數據文本顯示在指定ID的對話框控件中。
結合了GetDlgItem和SetWindowsText函數功能。
GetWindowsText獲取編輯框控件內容(與GetDlgItem配合使用);
eg:
GetDlgItem(控件ID)->GetWindowsText(控件變量);
SetWindowsText將數據顯示在編輯框控件中(使用同上)。
GetDlgItemInt函數傳回指定控件的文本;
SetDlgItemInt函數指定數值設定控件的文本。
Mon.(Monday) Tue.(Tuesday) Wed.(Wednesday) Thu.(Thursday) Fri.(Friday) Sat.(Saturday) Sun.(Sunday)Mon
------------------------------------------------------------------------
DoDataExchange函數完成對話框數據的交換和校驗;
用Create函數創建非模態對話框時,需要調用ShowWindow函數將該對話框顯示出來。->ShowWindow(SW_SHOW)
摸態對話框隻需調用DoModal函數即可。
----------------------------------------------------------------
創建非模式對話框時,不可將對話框對象定義為局部變量:
1)定義為視類(C--View)的成員變量;
2)定義為指針,在堆上配置設定內存。
因為對象為局部對象,程式不能釋放內存。應當:
1)在C---View類的析構函數中調用delete函數釋放內存;
2)在C--Dlg中重載PostNcDestroy虛函數,釋放this指針所指向的內存。
-----------------------------------------------------------------
對象為指針類型,用->調用成員函數。
---------------------------------------------------------------
靜態文本控件在默認狀態下不發送報告消息
使靜態文本控件響應鼠標消息,需進行兩個特殊步驟:
1->改變ID;
2->在其屬性對話框中將Notify改為TURE。
----------------------------------------------------------------
-----------------------------------------------------------------
-----實現編輯框控件中兩數相加顯示結果在第三個控件中-------
----------------------------源代碼------------------------------
-----------------------------------------------------------------
第一種方法
------------
int num1,num2,num3;
char ch1[10],ch2[10],ch3[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);//將數值還原為文本
//顯示控件變量
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
------------------------------------------------------------------
第二種方法
------------
//與方法一相同,僅改變了函數
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);
SetDlgItemText(IDC_EDIT3,ch3);
------------------------------------------------------------------
第三種方法
-----------
int num1,num2,num3;
num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3,num3);
-------------------------------------------------------------------
------------------------下午--------------------------------------
-------------------------------------------------------------------
第四種方法
-----------
關聯變量:程式在DoDataExchange函數內部實現了對話框控件與類成員變量的關聯;
MFC中以DDX_為前綴的函數用於不同控件的數據交換;
該函數由UpdateData函數調用,
UpdateData有一個BOOL類型的參數:
值為TRUE表示該函數正在獲取對話框數據;
值為FALSE表示該函數正在初始化對話框的控件;
UpdateData();
m_num3 = m_num1+m_num2;
UpdateData(FALSE);
DDX——DialogDataExchange,對話框數據交換;
DDV——DialogDataValidation,對話框數據校驗;
EM_——Edit Control Message,編輯框控制消息。
-------------------------------------------------------------------------
第五種方法:
-------------
關聯控件變量,為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);
------------------------------------------------------------------------
第六種方法
------------
為獲取或設置視窗的文本,隻要知道獲取或設置視窗文本消息(WM_GETTEXT),
就可以通過SendMessage來發送該消息,以獲取或設置視窗文本。
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);//非關聯控件變量,用GetDlgItem獲取指針,再獲取視窗句柄
::SendMessage(m_edit2.m_hWnd,WM_GETTEXT,10,(LPARAM)ch2);//關聯控件變量,用m_edit2獲取視窗句柄;
num1 = atoi(ch1);
num2= atoi(ch2);
num3 = num1 + num2;
_itoa(num3,ch3,10);//將數值還原為文本
//顯示控件變量
m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);//該SendMessage函數是CWnd類的成員函數,無需視窗句柄
PlatformSDK和CWnd類都提供SendMessage函數,若調用PlatformSDK的函數,應在前面加上“::”
SDK的SendMessage函數第一個參數是視窗句柄。
每個視窗類對象Douglas有一個儲存了視窗句柄的成員m_hWnd;
可首先獲取編輯框視窗對應的C++對象的指針,再通過該指針獲取視窗句柄;
最後一個參數是(LPARAM)型。
---------------------------------------------------------------------------------
第七種方法
-------------
使用!直接!給對話框的子控件發送消息完成對控件的訪問,使用SendDlgItemMessage函數,
相當於同時結合了GetDlgItem和SendMessage兩個函數;
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);
---------------------------------------------------------------------------------------------
EM_GETSEL消息實現獲得編輯框中複選的內容,EM_SETSEL設置編輯框中複選的內容;
添加
SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,1,3);
m_edit3.SetFocus();//獲取焦點
----------------------------------------------------------------------------------------------
總結:七種訪問對話框控件的方式
----------------------------------
~1.GetDlgItem()->Get(Set)WindowText()
2.GetDlgItemText()/SetDlgItemText()
3.GetDlgItemInt()/SetDlgItemInt()
~4.將控件和整型變量相關聯
~5.將控件和控件變量相關聯
6.SendMessage()
7.SendDlgItemMessage()
--------------------------------------------------------------------------
-------------------------數字編輯框-------------------------------------
添加類:CNumberEdit
類添加WM_CHAR響應函數
添加代碼:
倒退鍵、減號、小數點的ASCII碼分別為:8、45、46
if (nChar==8||nChar==45||nChar==46)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);//調用基類方法
return;
}
if (nChar<48||nChar>57)//允許輸入數字
nChar=0;//設置鍵值為0
else
CEdit::OnChar(nChar, nRepCnt, nFlags);
給隻允許輸入數字的編輯框控件關聯ctr類型的CNumberEdit型變量。