天天看點

MFC-EditBox控件

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型變量。