你可以参考一下Q99848 http://support.microsoft.com/support/kb/articles/Q99/8/48.ASP -------------------- Here's an example of how an application could use ON_MESSAGE: // inside the class declaration afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); ... #define WM_MYMESSAGE (WM_USER + 100) BEGIN_MESSAGE_MAP(CMyWnd, CMyParentWndClass) ON_MESSAGE(WM_MYMESSAGE, OnMyMessage) END_MESSAGE_MAP() LRESULT CMyWnd::OnMyMessage(WPARAM WParam, LPARAM LParam) { return (LRESULT)0; }--------------------如果你以前学过纯SDK的编程,你就知道为什么要返回一个LRESULT了,事实上,windows消息循环里面的任何一个消息处理函数都是有一个LRESULT的返回值的改成上面例子里面的格式就没有问题了:)
http://support.microsoft.com/support/kb/articles/Q99/8/48.ASP
--------------------
Here's an example of how an application could use ON_MESSAGE: // inside the class declaration
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); ... #define WM_MYMESSAGE (WM_USER + 100) BEGIN_MESSAGE_MAP(CMyWnd, CMyParentWndClass)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP() LRESULT CMyWnd::OnMyMessage(WPARAM WParam, LPARAM LParam)
{
return (LRESULT)0;
}--------------------如果你以前学过纯SDK的编程,你就知道为什么要返回一个LRESULT了,事实上,windows消息循环里面的任何一个消息处理函数都是有一个LRESULT的返回值的改成上面例子里面的格式就没有问题了:)
#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
(memberFxn)) },
他强制定义了返回值是LRESULT,所以void是不行的。而且在.net中类型检查更加严格。我试过了,用LRESULT编译可以过的。