標籤:color event 通過 font 儲存 size blank 進入 str
轉自:http://www.jizhuomi.com/software/156.html
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比較習慣。
大家應該記得,“計算”按鈕的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”對話方塊,如:
可見“Message type”中預設選中的就是BN_CLICKED訊息,函數名和所在類都已經自動給出,直接點“Add and Edit”就可以了。
3.在按鈕的屬性視圖中添加訊息處理函數
上面說過,從VS2002開始就主要從屬性視圖添加訊息處理函數了。我們在“計算”按鈕上點右鍵,在右鍵菜單中選擇“Properties”,右側面板中會顯示按鈕的屬性視圖。
我們可以像中那樣,點屬性視圖的“Control Events”按鈕(類似閃電標誌),下面列出了“計算”按鈕的所有訊息。我們要處理的是BN_CLICKED訊息,點其右側空白清單項目,會出現一個帶下箭頭的按鈕,再點此按鈕會出現“<Add> OnBnClickedAddButton”選項,最後選中這個選項就會自動添加BN_CLICKED處理函數了。
4.雙擊按鈕添加訊息處理函數
最直接最簡單的方法就是,雙擊“計算”按鈕,MFC會自動為其在CAdditionDlg類中添加BN_CLICKED訊息的處理函數OnBnClickedAddButton()。
二.在訊息處理函數中添加自訂功能
在我們使用任意一種方法添加了訊息處理函數以後,都只能得到一個空的OnBnClickedAddButton()函數的函數體,要實現我們想要的功能,還需要在函數體中加入自訂功能代碼。
在加法計算機程式中,我們想要“計算”按鈕實現的功能是,擷取被加數和加數的數值,然後計算它們的和並顯示到和的編輯框裡。那麼,OnBnClickedAddButton()的函數體就應修改為:
C++代碼:
void CAdditionDlg::OnBnClickedAddButton() { // TODO: Add your control notification handler code here // 將各控制項中的資料儲存到相應的變數 UpdateData(TRUE); // 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend; // 根據各變數的值更新相應的控制項。和的編輯框會顯示m_editSum的值 UpdateData(FALSE); }
上面的代碼已經添加了注釋,大家應該很容易理解了。對於UpdateData()函數的說明在上一講中已經介紹過,如果忘了可以再回上一講瞭解瞭解。
接下來我們運行下此應用程式。在運行結果介面中,輸入被加數5.1,加數2.3,然後點“計算”:
在中可以看到,點“計算”按鈕後,和的編輯框中顯示了正確結果: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)根據被加數、加數、和的值更新三個編輯框的顯示值,就得到了中的結果。
到此,一個具有簡單的加法運算功能的加法計算機應用程式就基本完成了。如果大家想實現其他功能,可以修改控制項資源和訊息處理函數來練習下。
VS2010-MFC(對話方塊:為控制項添加訊息處理函數)