vc2005/MFC-添加不常用的消息的消息处理函数/消息处理函数.


一般情况下, 添加常用的消息的消息处理函数的过程为: 点击要添加消息处理函数的类名->在属性界面内选择对应的消息->添加消息处理函数即可.

但是, 属性列表里自带的消息处理函数有限. 那么如何添加别的消息的消息处理函数呢?

下面 以 WM_COPYDATA为例. 做一个介绍:
1:
首先在属性列表里添加 WM_KEYDOWN的消息处理函数OnKeyDown(...)

2:
找到vc2005为响应WM_KEYDOWN而添加的宏:
    如果不出意外的话, 应该是如下所示:   
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
 ON_WM_KEYDOWN()
END_MESSAGE_MAP()

3:
右击ON_WM_KEYDOWN宏, 转到定义, 你会发现几乎所有的消息都在这里做了映射, 当然少不了 WM_COPYDATA消息. 找到WM_COPYDATA消息对应的宏: ON_WM_COPYDATA()

4:
添加宏 ON_WM_COPYDATA()
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
 ON_WM_KEYDOWN()
 ON_WM_COPYDATA() // 添加到这里
END_MESSAGE_MAP()

5:
#define ON_WM_COPYDATA() /
 { WM_COPYDATA, 0, 0, 0, AfxSig_bWCDS, /
  (AFX_PMSG)(AFX_PMSGW) /
  (static_cast< BOOL (AFX_MSG_CALL CWnd::*)(CWnd*, COPYDATASTRUCT*) > ( &ThisClass :: OnCopyData)) }
通过查看宏,可以知道, 对应WM_COPYDATA的消息处理函数为OnCopyData, 参数列表为(CWnd*, COPYDATASTRUCT*) , 返回值为: BOOL.

6:
添加成员函数即可.
 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
 afx_msg BOOL OnCopyData( CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct ); // 新添加的

////////////////////////////
另一方面,也可以通过重载WindowProc, 自行处理WM_COPYDATA消息.
////////////////////////////
由于消息的宏映射和VC6.0的不一样了,添加自定义的消息处理宏, 应该和上面的方式一样
比如
自己写一个ON_WM_MYMSG() ....???

你可能感兴趣的:(vc2005/MFC-添加不常用的消息的消息处理函数/消息处理函数.)