簡(jiǎn)單繪圖
本章介紹了MFC的消息映射機制,探討發(fā)送給窗口的消息是如何被MFC框架通過(guò)窗口句柄映射表和消息映射表來(lái)用窗口類(lèi)的處理函數進(jìn)行響應的。討論設備描述表及其封裝類(lèi)CDC的應用,結合畫(huà)圖程序進(jìn)行分析。
4.1消息映射機制
為視類(lèi)添加一個(gè)鼠標左鍵按下的消息,在源文件中會(huì )添加3處代碼。
[DrawView.h]
1 protected:
2 //{{AFX_MSG(CDrawView)
3 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
4 //}}AFX_MSG
5 DECLARE_MESSAGE_MAP()
此次為一個(gè)OnLButtonDown函數的聲明。
2. [DrawView.cpp]
1 BEGIN_MESSAGE_MAP(CDrawView, CView)
2 //{{AFX_MSG_MAP(CDrawView)
3 ON_WM_LBUTTONDOWN()
4 //}}AFX_MSG_MAP
5 END_MESSAGE_MAP()//消息映射表
此處為將一個(gè)鼠標左鍵按下的消息和一個(gè)消息響應函數關(guān)聯(lián)起來(lái)。
3. [DrawView.cpp]
1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
2 {
3 // TODO: Add your message handler code here and/or call default
4 //MessageBox(“OK”);
5 CView::OnLButtonDown(nFlags, point);
6 }
OnLButtonDown函數實(shí)現。
MFC消息映射機制的具體實(shí)現方法是:在每個(gè)能接收和處理消息的類(lèi)中(View,Frame.)定義了一個(gè)消息和消息靜態(tài)函數對照表,即消息映射表,在消息映射表中,消息與對應的消息處理函數指針是成對出現的。某個(gè)類(lèi)能處理所有消息及其對應的消息處理函數的地址都列在這個(gè)對應的靜態(tài)表中,當有消息需要處理時(shí),程序只需要搜索改消息靜態(tài)表,查看表中是否有改信息,就知道該類(lèi)能否處理該消息,如果能,則通過(guò)靜態(tài)表找到與之對應的消息處理函數。
在CDrawView類(lèi)中,CDrawView對象相關(guān)一個(gè)窗口,當然有它的窗口句柄,該句柄與CDrawView對象的一個(gè)指針CDrawView*存在一一對應的關(guān)系。
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |