VS2010/MFC編程入門之八(對話框:爲控件添加消息處理函數)

創建對話框類和添加控件變量在上一講中已經講過,這一講的主要內容是如何爲控件添加消息處理函數。

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

       一.添加消息處理函數

       雞啄米仍以前面的加法計算器的程序爲例,說明怎樣爲“計算”按鈕控件添加消息處理函數。添加方法列出4種:

       1.使用Class Wizard添加消息處理函數

       用過的VC++ 6.0的朋友應該對Class Wizard很熟悉了,添加、消息處理函數等經常會用到它,可以說是一個很核心的功能。但從VS2002開始就見不到Class Wizard了,大部分功能都集成到對話框和控件等的屬性中了,使用很方便。到VS2010,久違的Class Wizard又回來了。但雞啄米已經習慣了使用屬性中的功能了,對於從VC++ 6.0直接轉VS2010的朋友可能覺得還是使用Class Wizard比較習慣。

VS2010/MFC編程入門之九(對話框:爲控件添加消息處理函數)

       大家應該記得,“計算”按鈕的ID爲IDC_ADD_BUTTON,上圖中Commands標籤下,Oject IDs列表中有此ID,因爲我們是想實現點擊按鈕後的消息處理函數,所以在Messages列表中選擇BN_CLICKED消息,然後點右上方的Add Handler就可以添加BN_CLICKED消息處理函數OnClickedAddButton了。當然你也可以改名,但一般用的默認的就可以。

       2.通過“Add Event Handler...”添加消息處理函數

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

VS2010/MFC編程入門之九(對話框:爲控件添加消息處理函數)

       可見“Message type”中默認選中的就是BN_CLICKED消息,函數名和所在類都已經自動給出,直接點“Add and Edit”就可以了。

       3.在按鈕的屬性視圖中添加消息處理函數

       上面說過,從VS2002開始就主要從屬性視圖添加消息處理函數了。我們在“計算”按鈕上點右鍵,在右鍵菜單中選擇“Properties”,右側面板中會顯示按鈕的屬性視圖。

VS2010/MFC編程入門之九(對話框:爲控件添加消息處理函數)

       我們可以像上圖中那樣,點屬性視圖的“Control Events”按鈕(類似閃電標誌),下面列出了“計算”按鈕的所有消息。我們要處理的是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.   
  7.     // 將被加數和加數的加和賦值給m_editSum   
  8.     m_editSum = m_editSummand + m_editAddend;   
  9.   
  10.     // 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值   
  11.     UpdateData(FALSE);   
  12. }  

       雞啄米在上面的代碼中已經添加註釋,大家應該很容易理解了。對於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)根據被加數、加數、和的值更新三個編輯框的顯示值,就得到了上圖中的結果。

       到此,一個具有簡單的加法運算功能的加法計算器應用程序就基本完成了。如果大家想實現其他功能,可以修改控件資源和消息處理函數來練習下。本節就講到這裏了,有問題歡迎到雞啄米博客或者我們的編程入門qq羣討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章