MFC-EditBox控件

30 篇文章 0 订阅
15 篇文章 0 订阅

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值