为什么消息循环这样就接收不到键盘消息了呢?(两帖一起给分)

hucailai 2010-05-17 08:07:01

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
if (msg.message == WM_KEYUP || msg.message == WM_KEYDOWN)
{
if (msg.message == WM_KEYUP)
{

PostMessage(GetActiveWindow(), msg.message, msg.wParam, msg.lParam);
}
else
{
PostMessage(GetActiveWindow(), msg.message, msg.wParam, msg.lParam);
}
}
else
{
DispatchMessage(&msg);
}
}


把其中的PostMessage都改成SendMessage就能正常了。

为什么采用这种消息循环的方式,见另一帖
http://topic.csdn.net/u/20100512/14/211edbd4-c890-40e8-b151-85f5991b112b.html
...全文
375 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hucailai 2010-05-22
  • 打赏
  • 举报
回复
自己顶!!!!!!!!
hucailai 2010-05-21
  • 打赏
  • 举报
回复
继续等待高手!
yanchenyu 2010-05-18
  • 打赏
  • 举报
回复
学习,拿十分
hucailai 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 uc_fly 的回复:]
楼主把DispatchMessage(&msg)放在else外面试试。
[/Quote]

先把我的意思看明白行吗?
hucailai 2010-05-17
  • 打赏
  • 举报
回复
问题是我不用Pose 也不用Send
消息循环这样写


MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

也会有这种现象,我是为了解决这个问题(目标窗口还在响应按键信息)才发了两个帖求救的。

请指点该怎么解决问题?
多谢了
你妹的特盗不 2010-05-17
  • 打赏
  • 举报
回复
post的消息只发送给目标程序, send要等目标程序执行完这个消息才返回

post的话,就有一个问题,你发送的消息不能及时得到响应,表面上看是这样
比如你不停的给一个窗口POST按键消息,然后窗口显示,你一直压着键,松开后,目标窗口还在响应按键信息
你用send的话,就没有这个现象.....
hucailai 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yincheng01 的回复:]
可能就设计到PostMessage和SendMessage的区别在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都继续执行,而SendMessage必须等待其他程序处理消息后才继续执行。这两个函数的返回值也不能,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
[/Quote]

你把PostMessage 和SendMessage的区别讲了一下,但是为什么用PostMessage程序就接收不到键盘消息了呢?
另外能帮忙看下 由下帖引发
http://topic.csdn.net/u/20100512/14/211edbd4-c890-40e8-b151-85f5991b112b.html
  • 打赏
  • 举报
回复
PostMessage的返回值表示PostMessage函数执行是否正确,
而SendMessage的返回值表示其他程序处理消息后的返回值。
Snovate 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yincheng01 的回复:]

可能就设计到PostMessage和SendMessage的区别在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都继续执行,而SendMessage必须等待其他程序处理消息后才继续执行。这两个函数的返回值也不能,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。 ……
[/Quote]

正解
liuharris 2010-05-17
  • 打赏
  • 举报
回复
应该可以的
jyh_baoding 2010-05-17
  • 打赏
  • 举报
回复
应该可以啊
尹成 2010-05-17
  • 打赏
  • 举报
回复
可能就设计到PostMessage和SendMessage的区别在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都继续执行,而SendMessage必须等待其他程序处理消息后才继续执行。这两个函数的返回值也不能,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
ryanbanks 2010-05-17
  • 打赏
  • 举报
回复
学习~~
chinoistzc 2010-05-17
  • 打赏
  • 举报
回复
接分...
uc_fly 2010-05-17
  • 打赏
  • 举报
回复
楼主把DispatchMessage(&msg)放在else外面试试。
hucailai 2010-05-17
  • 打赏
  • 举报
回复
自己顶!!!!!!!!

16,472

社区成员

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

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

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