自定义消息的发送和接收

sprgdn 2003-10-19 06:57:02
对消息传递机制不是很明白:自定义了一个消息,在A窗口中发送,在B窗口中接收,如何实现?我是这样的:

1. 在xx.h里定义:define WM_XX WM_USER+100

2. 在窗口A.cpp的一个函数中发送消息(用全局函数直接发送到窗口B中)

3. 在窗口B.h中
//{{AFX_MSG(CDlgLevel2)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnXX();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

4. 在窗口B.cpp中
BEGIN_MESSAGE_MAP
//。。。。
ON_MESSAGE(WM_XX, OnXX)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

5. 在窗口B.cpp中定义void OnXX()

两个窗口的cpp文件都包含了xx.h,但是窗口B好象没有收到自A发送的消息。
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sprgdn 2003-10-20
  • 打赏
  • 举报
回复
已经搞定,原来的问题出在没有按标准定义函数:

afx_msg LRESULT OnXXXX(WPARAM wParam, LPARAM lParam);


谢谢各位!
flyelf 2003-10-19
  • 打赏
  • 举报
回复
自定义消息映射函数按照微软的解释,最好是定义如下
afx_msg LRESULT OnXXXX(WPARAM wParam, LPARAM lParam);
要想在b窗口中接收到WM_XXX的消息,要手动发送
::SendMessage(hWndBDlg, WM_XXX, wParam, lParam);或者
::SendMessage(hWndBDlg, WM_XXX, wParam, lParam);
其中hWndBDlg为b窗口的句柄,wParam和lParam是发送的具体消息,可以按照自己的需要解释
horin153 2003-10-19
  • 打赏
  • 举报
回复
楼上说得很对,尤其是"发送消息时,要指定窗口B的句柄".当然,问题还是在于楼主没有把具体的代码列出,只是文字叙述,这是不好说明问题的.
孤必有邻 2003-10-19
  • 打赏
  • 举报
回复
发送消息时,要指定窗口B的句柄,或者由窗口B的指针发送
处理函数声明必须遵循:
afx_msg BOOL OnXX(UINT message,WPARAM wParam,LPARAM lParam);
发送参数后面两个为0,(因为即使你不写0,系统仍然是三个参数)

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧