关于PostMessage

CrazyBW 2013-08-10 12:17:01
问一下,我定义了自定义消息WM_MY_MESSAGE,当我使用PostMessage的时候,这个消息被谁接收?是被MFC创建的主线程接收么?另外我怎么去响应这个消息? 通过BEGINMESSAGEMAP么?
我想给我自己创建的线程(线程里面有消息循环),我只能通过PostThreadMessage么?通过PostMessage,线程收不到消息么?
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2013-08-10
  • 打赏
  • 举报
回复
PostMessage这个API是有个窗口句柄参数的. 我想, 你使用的应该是CWnd类为的PostMessage, 那接收都自然就是CWnd类自己, (应该就是你的主窗口, 具体看你的代码在哪个类中调用的)
davidyu720 2013-08-10
  • 打赏
  • 举报
回复
引用 2 楼 CrazyBW 的回复:
的线程发消息时,在线程体中使用DispatchMessage(),这个消息被分发到哪里去了?
线程收到PostThreadMessage来的消息后,DispatchMessage后,消息被派发到窗口WndProc上。 如果你使用CWinThread线程,也可以用PreTranslateMessage处理自定义消息,不需要Dispatch。
CrazyBW 2013-08-10
  • 打赏
  • 举报
回复
引用 1 楼 davidyu720 的回复:
PostMessage消息要发给窗口,因此消息自然是被窗口接收啊。如果是想问被哪个线程接收,当然是创建这个窗口的线程了。 是的 ,用DECLARE_MESSAGE_MAP()和BEGIN/END_MESSAGE_MAP()响应消息。 给线程发消息,可以用PostThreadMessage()。也可以让线程创建窗口(可见不可见都行),然后给窗口Send/PostMessage()。线程消息和窗口消息都由线程的消息循环接收处理。
我再追问一条,当我试用PostThreadMessage()给我自己创建的线程发消息时,在线程体中使用DispatchMessage(),这个消息被分发到哪里去了?
davidyu720 2013-08-10
  • 打赏
  • 举报
回复
PostMessage消息要发给窗口,因此消息自然是被窗口接收啊。如果是想问被哪个线程接收,当然是创建这个窗口的线程了。 是的 ,用DECLARE_MESSAGE_MAP()和BEGIN/END_MESSAGE_MAP()响应消息。 给线程发消息,可以用PostThreadMessage()。也可以让线程创建窗口(可见不可见都行),然后给窗口Send/PostMessage()。线程消息和窗口消息都由线程的消息循环接收处理。

15,471

社区成员

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

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