VC++添加成員函數、消息處理函數
在設計應用程序時,經常需要向對話框中添加一些數據成員和成員函數。大家知道,在MFC應用程序中,對話框實際是一個CDialog類,那麼向對話框中添加數據成員和成員函數與向普通類中添加數據成員和成員函數是相同的,只是Visual C++開發環境提供了更方便的方法。
1 添加成員函數
1.1 手動添加
向對話框類中添加成員函數,可以在類定義處(頭文件部分)聲明一個函數原型,然後在類的實現部分(源文件部分)編寫函數的實現部分。
1.2 使用嚮導添加成員函數
在VC++開發環境中,可以通過工作區窗口的ClassView(類視圖)選項卡來實現。
在「類視圖」選項卡中選中要添加成員函數的類並單擊滑鼠右鍵,在彈出的快捷菜單中選擇「添加」→「添加函數」命令,在彈出的「添加成員函數嚮導」中設置要添加的成員函數的名稱、返回值、參數、訪問許可權等。
Advertisements
(類視圖用於顯示工程中的類信息、結構信息和全局變數等。通常,在程序中利用類視圖來查看類的數據成員、定位類的方法以及向類中添加數據成員、函數(方法)等。)
單擊「確定」按鈕,開發平台自動完成以下兩部分的工作:
a 在對話框的定義處出現了函數的聲明;
b 在對話框的實現處出現了函數的定義,即在類中添加了一個成員函數,自動添加了如下的函數實現的框架,而不需要手動編寫這部分代碼。
bool CRecordsDlg::GetTextFromClipboard()
{
}
2 添加消息處理函數
消息處理函數是指在系統的某個消息產生時執行的函數。消息處理函數需要用戶來調用,不是系統自動調用的。消息處理函數與普通的成員函數的定義是相同的,只是為了區分,在消息處理函數前通常添加afx_msg宏標識。afx_msg宏定位為空白,沒有任何作用,只是為用戶起到標識消息處理函數的功能。為了將消息處理函數與某一個消息關聯,使得在該消息產生時能夠調用消息處理函數,每一個消息處理函數都有一個消息映射宏。以最簡單的按鈕單擊事件為例,在雙擊對話框中的按鈕時,將會添加按鈕的單擊事件消息處理函數,此時系統在對話框的消息映射部分自動添加消息映射宏。
Advertisements
2.1 使用類嚮導添加消息處理函數
雙擊在控制項面板中提供的控制項時,都會提供一個默認的消息處理函數,它們關聯於控制項最常用的消息。這是Visual C++的設計者為了方便開發人員編寫代碼而提供的功能。此外,也可以利用類嚮導為控制項添加消息處理函數。
控制項右擊→「建立類嚮導」→選擇相應的項目、類、對象、消息,即可新建消息處理函數。
添加了消息處理函數后,源文件中有3處發生了變化:
I 頭文件recordsDlg.h中對消息處理函數的聲明:
afx_msg void OnButton2();
II 在C文件recordsDlg.cpp中對消息與函數的映射:
ON_BN_CLICKED(IDC_BUTTON2, OnButton2);
III 在C文件recordsDlg.cpp中對消息處理函數的定義:
void CRecordsDlg::OnButton20()
{
……
}
以上編寫的是對話框中控制項的消息處理函數,用戶也可以編寫對話框的消息處理函數。
a 在類嚮導中添加:選擇的對象的ID為對話框的ID即可;
b 在類視圖中添加:在工作區的類視圖窗口中用滑鼠右鍵單擊對話框類,在彈出的快捷菜單中選擇Add Windows Message Handler命令。
2.2 手動添加命令消息處理函數
在開發應用程序時,有時需要用戶自定義一些消息,編寫消息的處理函數。在Visual C++中沒有嚮導提供自定義消息的功能,為此就需要手動編寫消息處理函數。
首先需要定義一個消息常量值。對於自定義的消息常量值,為了防止與系統消息值相同,可以以WM_USER消息值為基礎遞增。例如:
#define CM_POSCHANGE WM_USER + 1
然後向對話框中添加一個成員函數。
void OnPosChanged();
最後添加自定義消息CM_POSCHANGE的消息映射宏,將CM_POSCHANGE消息與OnPosChanged成員函數關聯在一起。
BEGIN_MESSAGE_MAP(CRecordsDlg,CDialog)
ON_MESSAGE(CM_POSCHANGE,OnPosChanged)
END_MESSAGE_MAP()
這樣,當對話框中接收到CM_POSCHANGE消息時系統將調用OnPosChanged方法。
-End-