请问如何在一个循环过程中响应系统消息?(如鼠标双击)愿赠1000分

riowang 2002-11-18 10:36:18
我想作一个系统,用一个挺长的循环来模拟生产过程,但在此过程中要响应用户的消息,如双击鼠标或点击某菜单,使这个循环暂停来处理一些事务,然后继续循环。
请问要如何做到这一点?如果在循环中作不到,可以采取什么别的办法?
请高手赐教,如果能点化小生,愿赠1000分
...全文
44 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahongxi 2002-12-09
  • 打赏
  • 举报
回复
这1000分真是太好拿了,我回答过致少N次这种问题,在VC中只要在循环中加入:
AfxGetApp()->PumpMessage();
即可,它相当于VB中的DoEvent
如:
for(int i=0; i<1000; i++)
{
........//你要处理的东东
AfxGetApp()->PumpMessage();
}

当然,为此负出的代价是:循环由于要处理PumpMesage,效率[时间上]变低了。
GZCompiler 2002-12-09
  • 打赏
  • 举报
回复
不要在循环中不停的刷新控件的状态,这样有以下两点不足:
1. 刷新太快,不能看见中间结果。这就是为什么你只能看见最后结果的原因。
2. 不能接受消息,你没办法在中间修改控件的属性值。

所以建议你用Timer,每隔一段时间(如一秒)刷新一次控件状态。这样既可接受外界消息,又可看清变化过程。
xhwu3721 2002-11-18
  • 打赏
  • 举报
回复
多线程。
llwwwww 2002-11-18
  • 打赏
  • 举报
回复
多线程。

给分点右上角的管理
riowang 2002-11-18
  • 打赏
  • 举报
回复
好久不来了,给分的方法好像变了,请提示一下,我好给分
riowang 2002-11-18
  • 打赏
  • 举报
回复
我试验一下先,有效的话,就给大家送分:)
先行致谢了
madmanahong 2002-11-18
  • 打赏
  • 举报
回复
你可以在循环中添加判断消息的机制!

用windows下的消息环可以轻松满足!当然也可以自己写!
for(;;)
{
if(value==ture)
do(...);
}

ruihuahan 2002-11-18
  • 打赏
  • 举报
回复
楼上说的对。
用PeekMessage。
babam 2002-11-18
  • 打赏
  • 举报
回复
中断的想法;
收取系统的消息
当双击的时候就
break,把你要记下的数据放到一个结构里(如循环的次数),
响应完.就取得这个结构.
继续循环就好了!
gbstar2021 2002-11-18
  • 打赏
  • 举报
回复
详细一点
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message==WM_LBUTTONDBLCLK)
{
// 做你需要的工作
}
......
}
gbstar2021 2002-11-18
  • 打赏
  • 举报
回复
循环中加上

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


msg 中有你需要的消息内容,可以分别处理

16,548

社区成员

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

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

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