?? d023.bmp.txt
字號(hào):
函數(shù):SendMessage、PostMessage和SendDlgItemMessage。而消息處理則相對(duì)來說顯得復(fù)雜
一些。MFC采用了一種新的機(jī)制取代C語(yǔ)言編程時(shí)對(duì)Windows消息的Switch/Case分支,
簡(jiǎn)化了Windows編程,使程序的可讀性、可維護(hù)性大大提高。
1.MFC對(duì)消息的處理
MFC不使用C語(yǔ)言編寫Windows程序時(shí)用到的易產(chǎn)生錯(cuò)誤的switch/case語(yǔ)句,而采用
一種消息映射機(jī)制來決定如何處理特定的消息。這種消息映射機(jī)制包括一組宏,用于標(biāo)識(shí)消
息處理函數(shù)、映射類成員函數(shù)和對(duì)應(yīng)的消息等。其中,用afx_msg放在函數(shù)返回類型前面,
用于標(biāo)記它是一個(gè)消息處理成員函數(shù)。類若已至少包含了一個(gè)消息處理函數(shù),那么還需要加
上一個(gè)DECLARE_MESSAGE_MAPO宏,該宏對(duì)程序執(zhí)行部分所定義的消息映射進(jìn)行初始
化。下面給出一個(gè)消息處理函數(shù)的例子:
class CMainFrame:CFrameWndf
public:
CMainFrame();
protected:
//{{ AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnEditCopy0;
afx_msg void OnClose0;
/,} }AFX_MSG
DECLARE_MESSAGE_MAP()
J;
成員函數(shù)OnCreate、OnEditCopy、OnClose分別用來處理消息WM_CREATE、ID_EDIT_
COPY和WM_CLOSE。其中,WM_CREATE和WM_CLOSE是系統(tǒng)預(yù)定義消息,包含在
Windows.h中。而ID_EDIT_COPY是菜單“Edit”一“Copy”的標(biāo)識(shí),也就是用戶選擇“Edit,,
一“Copy”菜單項(xiàng)時(shí)產(chǎn)生的消息,一般在資源文件頭文件中定義。在類的實(shí)現(xiàn)部分給出這三
個(gè)成員函數(shù)的定義,以及特殊的消息映射宏。上面的例子的消息映射宏定義如下:
B EGIN_MESS AGE_MAP(CMainFrame,CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_WM_CLOSEO
END_MESSAGE_MAPO
消息映射宏由BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()組成,表示映射函
數(shù)與消息韻對(duì)應(yīng)關(guān)系的代碼在BEGIN_MESSAGE_MAPO和END_MESSAGE_MAP()之間。
其中,BEGIN_ MESSAGE MAP宏包含兩個(gè)參數(shù)CMainFrame類和CFrameWnd,分別代表
當(dāng)前定義的類和它的父類。在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAPO之間,
包含了主窗口要處理的各個(gè)Windows消息的入口。在本例中,包含三個(gè)消息。其中,
ON_WM_CREATE被用來指定默認(rèn)的成員函數(shù)OnCreate與WM_CREATE相對(duì)應(yīng)。在MFC
中,包含了大量的預(yù)定義消息映射宏,用來指定各種成員函數(shù)與各種形如WM_ XXXX的消
息相對(duì)應(yīng)。如ON_WM_CLOSE宏指定了WM_CLOSE消息的處理成員函數(shù)為OnClose。這
時(shí)候,只需要寫出要處理的消息就夠了,不必再寫出處理函數(shù)。消息映射宏ON_COMMAND
23
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -