下面的sendmessage 看了半年没看懂!!!没分清楚sendmessage和非MFC 的sendmessage
没分清楚sendmessage和非MFC 的sendmessage
下面是哪种啊
#define WM_USER_SEND_INTDATA WM_USER+10
int data=10;
SendMessage(hwnd,WM_USER_SEND_INTDATA,(WPARAM)data,0);
WM_USER_SEND_INTDATA是什么,如果是自定义的 ,那该怎么定义,为什么偏偏要 +10呢
对应的接受方 该在哪里处理 能贴点代码吗
那第3个参数是什么 ,最后个参数为什么是0
[解决办法]
::SendMessage()调用全局的,MFC封装了一下,一般情况下都是MFC的。
#define WM_USER_SEND_INTDATA WM_USER+10 这是自定义消息的一种方法,WM_USER+N,N是任取的,只要不自己冲突。
WM_USER_SEND_INTDATA 自定义消息的名称,你看一下消息映射表,会发现,一个消息对应一个函数。对应的函数有两个参数wParam,和lParam,你的消息实现功能需要的条件可以从这里传进来。
第三四个参数就是参数而已,你想要什么传什么就OK了。
[解决办法]
Win32 API中的SendMessage是全局的
MFC中的SendMessage是CWnd类的成员函数
#define WM_USER_SEND_INTDATA WM_USER+10
这里的WM_USER_SEND_INTDATA就是一个自定义消息类型,自定义消息类型的值要大于等于WM_USER,至于大多少是用户自己定义的,只要和其他的自定义分开就行
消息处理的简单点的可以用MFC的宏:
ON_MESSAGE(WM_USER_SEND_INTDATA, message_handler)
message_handler就是你定义的消息处理函数
message可以带2个参数,如果第二个不需要,那就传0好了
[解决办法]
1 2楼讲的很详细了,补充下吧:
WM_USER+10这个10是随意的,因为同时定义的消息可能很多,所以一般定义为
WM_USER+N N可以是从1开始的自然数这样就不会跟系统消息相冲突
至于用法 以响应左键按下为例
消息响应会在3处修改代码,1处是在头文件中,
{{AFX_MSG(CDrawView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
...
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
另一处是cpp文件的begin MessageMap和End MessageMap之间,
BEGIN_MESSAGE_MAP(CDrawView, CView)
//{{AFX_MSG_MAP(CDrawView)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
END_MESSAGE_MAP()
最后是要有函数实现的代码。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
//code....
CView::OnLButtonDown(nFlags, point);
}
[解决办法]