消息的接收问题

angelcool 2004-12-23 11:04:13
要在A和B间传递消息,我是这样做的:
1、在A中定义消息AS_TITLE = ::RegisterWindowMessage("Answer");
发送消息
::PostMessage(hwndB, AS_TITLE, (UINT)(LPCTSTR)strCaption, 0);

2、在B中同样定义消息AS_TITLE = ::RegisterWindowMessage("Answer");
屏设置消息相应函数为
LRESULT CMainFrame::OnReply(WPARAM wParam, LPARAM lParam)

没有反映,不知道是哪里出错了。
请各位高人(比我高的人^_^)指点
...全文
117 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelcool 2005-01-10
  • 打赏
  • 举报
回复
再试一次
bluestone 2004-12-23
  • 打赏
  • 举报
回复
PostMessage只能在单线程内传递消息,现在已经是两个进程了,这个函数不行了吧。PostThreadMessage支持线程间消息传递,不过线程必须属于LUID相同的进程~~~

谁有好办法,我也学学吧~~
angelcool 2004-12-23
  • 打赏
  • 举报
回复
好,谢谢。我试试看
老夏Max 2004-12-23
  • 打赏
  • 举报
回复
你可以查看一下RegisterWindowMessage的返回值看看第二次注册的是否成功!
快乐鹦鹉 2004-12-23
  • 打赏
  • 举报
回复
你这是跨进程发消息阿。
就这样能行么。虽然没有试过,但感觉进程间发消息没有这么简单吧
老夏Max 2004-12-23
  • 打赏
  • 举报
回复
函数功能:该函数定义一个新的窗口消息,该消息确保在系统中是唯一的。返回的消息值可在调用函数SendMessage或PostMessage时使用。

函数原型:UINT RegisterWindowsMessage(LPCTSTR lpString);

参数:

lpString:指定将被注册的消息的以‘\O’结束的字符串指针。

返回值:如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数调用失败,返回值是零。要得到更多的错误信息,调用函数GetLastError。

备注:RegisterWindowMessage通常为合作应用程序间的通信注册消息。

如果不同的应用程序注册同样的消息字符串,应用程序返回同样的消息值。消息保持注册,直到会话完成。

当一个以上的应用程序必须处理同一个消息时,必须使用RegisterWindowMessage。要在窗口类里发送私有消息,应用程序可以使用UM_USER到OX7FFF范围内的任意整数。(在此范围的消息对窗口类私有,而不是对应用程序私有。如,预定义的控制类如BUTTON, EDIT LISTBOX和COMBOBOX可用此范围的值。)
老夏Max 2004-12-23
  • 打赏
  • 举报
回复
定义全局消息的时候不能重复,如果已经定义了全局的消息,那么就不能再定义了,这个消息是系统的!
angelcool 2004-12-23
  • 打赏
  • 举报
回复
to sdsuper(泊舟)
我知道你的意思,我记得应该还有其他方法处理消息,不一定要用这样吧。

我觉得我的这个思路大体是对的,肯定是哪里出了问题,使得它不能按我指定的方式运行。
sdsuper 2004-12-23
  • 打赏
  • 举报
回复
1、去定义一下你的消息,例如 #define MYMSG USER_MASSAGE + 10 之类
2、在消息处理的中增加对自定义消息的case,并调用自己的处理函数
3、添加对处理函数
angelcool 2004-12-23
  • 打赏
  • 举报
回复
to happyparrot(快乐鹦鹉)
A是一个对话框程序,调用B;
B是单文档应用程序

能够用PostMessage发送给B发送字符串数据吗?在OnReply中的wParam总是被认为是Int型。
快乐鹦鹉 2004-12-23
  • 打赏
  • 举报
回复
A和B是什么东东?
angelcool 2004-12-23
  • 打赏
  • 举报
回复
我将A中程序做了如下修改:
::PostMessage(hwndParent, AS_TITLE, (WPARAM)&strCaption, 0);

传递的是一些乱码,如何修改呢?

angelcool 2004-12-23
  • 打赏
  • 举报
回复
用PostMessage为什么只能传递“数字”,不能传递“字符”???
在A中
::PostMessage(hwndParent, AS_TITLE, (UINT)(LPCTSTR)strCaption, 0);
(UINT)(LPCTSTR)转换后还能保持数据的正确性吗?确保B能获得一个字符串??

在B中
LRESULT CMainFrame::OnReply(WPARAM wParam, LPARAM lParam)
{
g_WndChildTitle = (LPCTSTR)wParam;//这样得到的只是“\0”,为什么会这样
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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