在學習<vc6.0技術內幕>過程中遇到要添加用戶自定義消息的過程.我覺得書上寫的比較散,於是就自己總結了這個基本過程,以為日後備查.
首先弄清楚兩點:(1)誰要發送這個消息(2)誰要接受這個消息。
用一個簡單的例子來說明。對象A向B(也可以就是A到A)發送消息。
1 發送消息
首先在A的頭文件中定義這個消息:
#define WM_USERMESSAGE WM_USER+30
所有自定義消息都是以WM_USER消息為基礎加上一個任意的自然數來表示的。A是向外發送消息的對象,因此在A的某個方法(函數)裡就會調用用來發消息的函數B::SendMessage()/B::PostMessage(),因為是B接受消息,因此是如上的形式。
2 接受消息
對象接受一個消息,應該有三部分:在頭文件中有該消息的處理函數的原型;在實現文件中有接受消息映射的宏; 以及該消息的處理函數的具體實現。
2.1 頭文件中加上自定義消息的處理函數原型
在DECLARE_MESSAGE_MAP()語句之前,一對AFX_MSG之間加上如下形式的函數原型:
afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam );
對Win32來說,wParam, lParam是傳遞消息最常用的手段。
2.2 在實現文件中加上接受消息映射的宏
在cpp文件裡,BEGIN_MESSAGE_MAP語句之後,在一對AFX_MSG_MAP之間,增加 如下形式的代碼:
ON_MESSAGE(WM_USERMESSAGE, OnProcName)
上面是不用分號結尾的。
2.3 在實現文件中給出消息處理函數的具體實現。