MFC控件編程之 按鈕編輯框.靜態文本的使用,以及訪問控件的七種方法.


            MFC控件編程之 按鈕編輯框.靜態文本的使用以及訪問控件的七種方法.

一丶按鈕.靜態文本的通用屬性.

  他們都有一個屬性.就是可以輸入標題內容.以及可以自定義控件ID. 

創建一個MFC Dlg對話框.

關於對話框的標題.我們都可以在他們各自的屬性中設置.

也可以設置自己特有的ID.比如編輯框舉例

 

常用的API:

  1.根據控件ID.獲取控件的標題名稱.

  GetDlgItemText(控件ID,字符串緩沖區);

  2.根據控件ID.設置控件的標題.

  SetDlgItemText(控件ID.字符串);

二丶編寫代碼.獲取編輯框中的字符串的個數.

 雙擊按鈕.我們可以響應按鈕點擊消息.在按鈕點擊消息中獲取編輯框的內容.並且設置到靜態文本上.

PS: 我們需要都要設置這個控件的ID.否則無法使用API獲取.

PS: 我們如果在MFC中使用API .需要加上全局訪問符號.::  也就是四餅. 否則就是使用MFC自帶的 封裝的API

不過此時我們上面所說的API.就是使用的MFC封裝的.比較方便..

 

 

void CButtonAnEditAnStaticTextDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知處理程序代碼
    CString str;
    GetDlgItemText(EDT_SHOWVALUE, str); //獲取編輯框的內容.結果放到str緩沖區中.

    //統計字符個數.以及自己.
    int nlen = 0;
    nlen = str.GetLength();            //獲取緩沖區的長度.給nlen
    
    CString OutPut;
    OutPut.Format(TEXT("字符串長度 = %d "), nlen);//格式化字符串.給Output.
    //設置到靜態文本框
    SetDlgItemText(IDC_STATIC, OutPut);         //將設置好的字符串.設置到文本框中.
}

應用程序截圖:

 三丶訪問控件的七種方法.

上面我們已經使用了一種了. GetDlgItemText() 根據指定控件ID獲取控件文本.

3.1   控件ID訪問方法.

   GetDlgItem(控件ID)

  GetWindowsText(緩沖區.大小.)

 代碼示例:

    

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知處理程序代碼

    int nNum1, nNum2, nNum3;
    TCHAR ch1[12], ch2[12], ch3[12];
    //第一種方法.通過控件ID.獲取文本.
    GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,12);
    GetDlgItem(IDC_EDIT2)->GetWindowText(ch2, 12);

    //字符串變為數字.通用版.
    nNum1 = _ttoi(ch1);                                                                                                                    
    nNum2 = _ttoi(ch2);
    nNum3 = nNum1 + nNum2;

    //數字轉為字符串.設置到編輯框三種.
    _itot(nNum3, ch3, 10); //十進制轉換.
    GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
}

上面是MFC封裝好了.所以我們可以 ->繼續調用.如果是自己使用Windows API編寫.那么需要 ::GetDlgItem(指定窗口的句柄,控件ID)獲取根據控件ID尋找的窗口句柄.然后自己繼續調用 ::GetWindowText(句柄.緩沖區) 來進行獲取.

具體原理可以自己看下源代碼.不再多少.

應用截圖:

  

 

3.2GetDlgItemText() 獲取.

  

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知處理程序代碼

    int nNum1, nNum2, nNum3;
    TCHAR ch1[12], ch2[12], ch3[12];
    //第一種方法.通過控件ID.獲取文本.
    GetDlgItemText(IDC_EDIT1, ch1, 12);
    GetDlgItemText(IDC_EDIT2, ch2, 12);

    //字符串變為數字.通用版.
    nNum1 = _ttoi(ch1);                                                                                                                    
    nNum2 = _ttoi(ch2);
    nNum3 = nNum1 + nNum2;

    //數字轉為字符串.設置到編輯框三種.
    _itot(nNum3, ch3, 10); //十進制轉換.
    SetDlgItemText(IDC_EDIT3, ch3);
}

   前兩種方法獲得是字符串.然后自己要互相轉換.

3.3. 使用方法三.直接獲取整形.

  代碼如下

  int nNum1, nNum2, nNum3;
    nNum1 = GetDlgItemInt(IDC_EDIT1);
    nNum2 = GetDlgItemInt(IDC_EDIT2);

    nNum3 = nNum1 + nNum2;

    SetDlgItemInt(IDC_EDIT3,nNum3);

3.4 控件跟整形變量關聯. Value類型

如果使用這個方法.那么我們的控件需要綁定一個變量.使用這個變量來獲取跟設置.

編輯框 - > 類向導 -> 添加變量   給編輯框進行關聯.

三個依次關聯即可.

使用的時候需要用到一個函數. 

UpdateData(True) 或者 False

TRUE. 則把控件里面的數據.關聯到變量里. 簡單理解為就是獲取數據.調用了這個.那么我們綁定的變量就會有數據了.

FALSE: 數據設置到控件中. 當我們使用完變量則需要將數據設置到控件里顯示.就用FALSE.

具體代碼如下:

  

UpdateData(TRUE) ; //獲取數據到變量中
m_EdtNum3 = m_EdtNum1 + m_EdtNum2;
UpdateData(FALSE); //設置變量的數據到控件中.

使用的時候他會自己檢查是否是整數.

原理.

DoDataExChange函數. 

在MFC中有一個這種函數. 用來跟關聯變量的設置的.

 

DDX_Text 是跟變量關聯了.

DDV開頭的則是檢查的.

void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, int& value);
參數1: pdx
參數2: 控件ID
參數3: 控件關聯的變量.

 我們可以F12跟進看到很多這種類型.

 

3.5 把控件跟控件變量關聯. Edit類型.我們可以跟控件關聯

 

 

這個就可以當控件使用了.

我們給編輯框關聯的.那么查詢MSDN可以看到控件的操作方法.

如果獲取字符串可以使用這兩個函數.獲取跟設置. 也可以設置編輯框的最大字符數. 或者最小字符數.等等.具體查詢MSDN

m_Edit.GetWindowText();
m_Edit.SetWindowText();

3.6發送消息進行控件操作.

MFC中都是消息驅動的.那么我們也有API可以進行發消息操作.

::SendMessage(控件id的句柄,消息類型,大小.附加參數.)

::SendMessage(GetDlgItem(EDT_EDIT)->m_hWnd,WM_GETTEXT,12,(LPARAM)ch1);

參數2: 消息類型.我們WM_GETTEXT 是代表我要獲取這個文本.
參數3: 12 是緩沖區的長度.
參數4: 緩沖區.

其中3 4 是額外附加參數.什么意思? 就是說這個參數不確定.可以自己給定.
我們解析的時候按照對應類型解析即可. 你可以給數組.也可以給結構體.都是可以的.

設置字符串.

::SendMessage(Getdlgitem(IDC_EDT3),WM_SETTEXT,0,(LPARAM)ch3);

這個方法需要掌握.一般寫windows程序.這個函數會常用.

3.7 根據方法6合並的一個函數

SendDlgItemMessage(控件ID.WM_GETTEXT,附加參數,附加參數);

//使用例子

SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,12,(LPARAM)ch1);
設置字符串
SendDlgItemMessage(IDC_EDIT1,WM_SETTEXT,0,(LPARAM)ch3);

 

 

具體代碼:

 

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM