1. 程式人生 > >VS2013/MFC程式設計:(對話方塊:為控制元件新增訊息處理函式)

VS2013/MFC程式設計:(對話方塊:為控制元件新增訊息處理函式)

 建立對話方塊類和新增控制元件變數在上一講中已經講過,這一講的主要內容是如何為控制元件新增訊息處理函式。

       MFC為對話方塊和控制元件等定義了諸多訊息,我們對它們操作時會觸發訊息,這些訊息最終由訊息處理函式處理。比如我們點選按鈕時就會產生BN_CLICKED訊息,修改編輯框內容時會產生EN_CHANGE訊息等。一般為了讓某種操作達到效果,我們只需要實現某個訊息的訊息處理函式。

       一.新增訊息處理函式

       仍以前面的加法計算器的程式為例,說明怎樣為“計算”按鈕控制元件新增訊息處理函式。新增方法列出4種:

       1.使用類嚮導新增訊息處理函式

       在新增

、訊息處理函式等經常會用到類嚮導,可以說是一個很核心的功能。


       大家應該記得,“計算”按鈕的ID為IDC_ADD_BUTTON,Oject IDs列表中有此ID,因為我們是想實現點選按鈕後的訊息處理函式,所以在Messages列表中選擇BN_CLICKED訊息,然後點右上方的新增處理程式r就可以新增BN_CLICKED訊息處理函式OnClickedAddButton了。當然你也可以改名,但一般用的預設的就可以。

       2.通過“Add Event Handler…”新增訊息處理函式

       在“計算”按鈕上點右鍵,然後在右鍵選單中選擇選單項“Add Event Handler…”,彈出“Event Handler Wizard”對話方塊,如下圖:


       可見“訊息型別”中預設選中的就是BN_CLICKED訊息,函式名和所在類都已經自動給出,直接點“新增編輯”就可以了。

       3.在按鈕的屬性檢視中新增訊息處理函式

       我們在“計算”按鈕上點右鍵,在右鍵選單中選擇“Properties”,右側面板中會顯示按鈕的屬性檢視。


       我們可以像上圖中那樣,點屬性檢視的“控制時間”按鈕(類似閃電標誌),下面列出了“計算”按鈕的所有訊息。我們要處理的是BN_CLICKED訊息,點其右側空白列表項,會出現一個帶下箭頭的按鈕,再點此按鈕會出現“<Add> OnBnClickedAddButton”選項,最後選中這個選項就會自動新增BN_CLICKED處理函數了。

       4.雙擊按鈕新增訊息處理函式

       最直接最簡單的方法就是,雙擊“計算”按鈕,MFC會自動為其在CAdditionDlg類中新增BN_CLICKED訊息的處理函式OnBnClickedAddButton()。

       二.在訊息處理函式中新增自定義功能

       在我們使用任意一種方法添加了訊息處理函式以後,都只能得到一個空的OnBnClickedAddButton()函式的函式體,要實現我們想要的功能,還需要在函式體中加入自定義功能程式碼。

       在加法計算器程式中,我們想要“計算”按鈕實現的功能是,獲取被加數和加數的數值,然後計算它們的和並顯示到和的編輯框裡。那麼,OnBnClickedAddButton()的函式體就應修改為:

C++程式碼
  1. void CAdditionDlg::OnBnClickedAddButton()   
  2. {   
  3. // TODO: Add your control notification handler code here 
  4. // 將各控制元件中的資料儲存到相應的變數 
  5.     UpdateData(TRUE);   
  6. // 將被加數和加數的加和賦值給m_editSum 
  7.     m_editSum = m_editSummand + m_editAddend;   
  8. // 根據各變數的值更新相應的控制元件。和的編輯框會顯示m_editSum的值 
  9.     UpdateData(FALSE);   
  10. }  

       對於UpdateData()函式的說明在上一講中已經介紹過,如果忘了可以再回上一講了解了解。

       接下來我們執行下此應用程式。在執行結果介面中,輸入被加數5.1,加數2.3,然後點“計算”:

VS2010/MFC程式設計入門之九(對話方塊:為控制元件新增訊息處理函式)

       在上圖中可以看到,點“計算”按鈕後,和的編輯框中顯示了正確結果:7.4。

       簡單分析下執行過程:輸入被加數和加數,點“計算”按鈕後產生點選訊息,從而呼叫OnBnClickedAddButton()函式。進入此函式後,首先由UpdateData(TRUE)函式將被加數的值5.1和加數的值2.3分別儲存到變數m_editSummand和m_editAddend,然後通過語句m_editSum = m_editSummand + m_editAddend;計算出被加數和加數的和為7.4,並把7.4賦值給m_editSum。最後呼叫UpdateData(FALSE)根據被加數、加數、和的值更新三個編輯框的顯示值,就得到了上圖中的結果。

       到此,一個具有簡單的加法運算功能的加法計算器應用程式就基本完成了。如果大家想實現其他功能,可以修改控制元件資源和訊息處理函式來練習下。本節就講到這裡了,有問題歡迎到部落格留言討論。

相關推薦

VS2013/MFC程式設計:對話方塊控制元件新增訊息處理函式

 建立對話方塊類和新增控制元件變數在上一講中已經講過,這一講的主要內容是如何為控制元件新增訊息處理函式。        MFC為對話方塊和控制元件等定義了諸多訊息,我們對它們操作時會觸發訊息,這些訊息最終由訊息處理函式處理。比如我們點選按鈕時就會產生BN_CLICKED訊息,修改編輯框內容時會產生EN

VS2013/MFC程式設計入門之六對話方塊對話方塊新增控制元件

建立對話方塊資源需要建立對話方塊模板、修改對話方塊屬性、為對話方塊新增各種控制元件等步驟,前面一講中已經講了建立對話方塊模板和修改對話方塊屬性,本節繼續講如何為對話方塊新增控制元件。        上一講中建立了一個名為“Addition”的工程,目的是生成一個實現加法

VS2013/MFC程式設計入門之七對話方塊建立對話方塊類和新增控制元件變數

前兩講中為大家講解了如何建立對話方塊資源。建立好對話方塊資源後要做的就是生成對話方塊類了。再宣告下,生成對話方塊類主要包括新建對話方塊類、新增控制元件變數和控制元件的訊息處理函式等。        因為給大家的例程Addition是基於對話方塊的程式,所以程式自動建立了

VS2013/MFC程式設計入門之十六對話方塊檔案對話方塊

上一講介紹的是訊息對話方塊,本節講解檔案對話方塊。        檔案對話方塊的分類 檔案對話方塊分為開啟檔案對話方塊和儲存檔案對話方塊,相信大家在Windows系統中經常見到這兩種檔案對話方塊。例如,很多編輯軟體像記事本等都有“開啟”選項,選擇“開啟”後會彈出一個對

VS2013/MFC程式設計入門之十二對話方塊屬性頁對話方塊及相關類的介紹

本節開始講一種特殊的對話方塊--屬性頁對話方塊。        屬性頁對話方塊的分類        屬性頁對話方塊想必大家並不陌生,XP系統中桌面右鍵點屬性,彈出的就是屬性頁對話方塊,它通過標籤切換各個頁面。另外,我們在建立MFC工程時使用的嚮導對話方塊也屬於屬性頁對

VS2013/MFC程式設計入門之十五對話方塊訊息對話方塊

       本節講解Windows系統中最常用最簡單的一類對話方塊--訊息對話方塊。        我們在使用Windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以MFC提供了兩個函式可以直接生成指

VS2013/MFC程式設計入門之十一對話方塊非模態對話方塊的建立及顯示

 上一節講了模態對話方塊及其彈出過程,本節接著講另一種對話方塊--非模態對話方塊的建立及顯示。        前面已經說過,非模態對話方塊顯示後,程式其他視窗仍能正常執行,可以響應使用者輸入,還可以相互切換。本文中將上一講中建立的Tip模態對話方塊改為非模態對話方塊,讓

VS2010/MFC對話方塊檔案對話方塊

本文轉載於http://www.jizhuomi.com/software/173.html檔案對話方塊的分類 檔案對話方塊分為開啟檔案對話方塊和儲存檔案對話方塊,相信大家在Windows系統中經常見到這兩種檔案對話方塊。例如,很多編輯軟體像記事本等都有“開啟

VS2010-MFC:單文件左側可停靠對話方塊(包含樹控制元件)的實現

在程式開發中我們經常看見有一些軟體左側有目錄樹或者是圖層樹,點選之後就可以右側View視窗顯示相關的內容,其實實現這種機制有兩種方法,第一種就是對MFC的View視窗進行視窗分割,左側的視窗view類派生於CTreeView,其中CTreeView自帶一個變數用於View中的樹控制元件的控制。第二

MFC 對話方塊與常用控制元件

模態對話方塊建立方式 【方法一】建立對話方塊類的物件,然後呼叫domodal CGuiDlg dlg; dlg.DoModal(); 會阻塞,可以區域性變數。因為會堵塞 【方法二】 CDialog dlg(IDD_GUI_DLG); dlg.DoModal(); 2.非模態

MFC子執行緒訪問主執行緒對話方塊程式的控制元件物件

       最近在使用 VC 開發軟體時需要用到多執行緒同步來解決開發過程中遇到的問題。本來以為只要象控制檯程式一樣,在主執行緒建立子執行緒,並設定好相應的物件事件就能解決問題,但是等到真正做起來,才在實踐中發現原來事情並沒有我想象的那麼簡單。以下我介紹一下我在開發過程中

[MFC]在程式中訪問對話方塊中的控制元件——GetDlgItem函式

1. 使用GetDlgItem函式來訪問對話方塊中的控制元件:     1) 函式原型:CWnd* CWnd::GetDlgItem(int nID) const;     2) 只要引數指定為要訪問的控制元件的ID,即可返回該控制元件的指標,但要注意的是返回的是CWnd*

對話方塊使用ocx控制元件封裝dll

mfc對話方塊中使用了ocx,再封裝為dll,在匯出函式中加入AfxEnableControlContainer() void ShowMyDllDlg(HWND hMainWnd)   //匯出函式 {   AFX_MANAGE_STATE(AfxGetStaticMod

js--彈出對話方塊、改變控制元件內容、驗證輸入郵箱的合法性

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript">

MFC操作串列埠,詳細 複製程式碼ActiveX控制元件和Windows API函式

/******************************************************************* *******函式功能:開啟串列埠裝置連結 *******函式名稱:OpenComm *******輸入引數:無 *******輸出引數:無 ***

MFC控制元件新增浮動提示框的方法

當我們在寫MFC程式時,有時會希望當滑鼠懸浮在某個控制元件之上時,有相關訊息提示,下面總結該功能的實現方法; 1.在 XXXDlg.h 中: 新增虛擬函式: virtual BOOL PreTranslateMessage(MSG* pMsg); 新增變數宣告: CToolTip

VC 對話方塊背景顏色 控制元件顏色

系統環境:Windows 7 軟體環境:Visual C++ 2008 SP1 本次目的:為對話方塊設定背景顏色、控制元件顏色       既然MFC對話方塊不好開發,那麼現在我們來開始美化我們的對話方塊。為對話方塊設定背景顏色、控制元件顏色等等。

jquery-easyui彈出對話方塊被ActiveX控制元件遮擋

        找到引用的jquery-easy-ui的js檔案,在2430行中的<div class=\"window-shadow\"></div>的div中加入<i

MFC無法控制元件新增變數(Add Variab…

    許久不用MFC,今天在vs2008下用MFC寫個小東西,結果在為控制元件新增變數的時候,居然無法成功——那個介面顯示怪怪的,點選完成提示失敗。     還好同事遇到過這個問題,給出連結http://hi.baidu.com/sunbin728/blog/item/9fa86c1d0744e9

MFC 如何給ComboBox下拉框控制元件新增item,如何新增順序索引的資料項?

提到了新增item可以用AddString方法,效果如下: 我定義了一個數組: CString strFont[5] = { _T("宋體"),_T("楷體"),_T("仿宋"),_T("黑體"),_T("華文細黑") }; 想把這5個按陣列索引的順序新增到控制元件