请问如何在一个循环过程中响应系统消息?(如鼠标双击)愿赠1000分 我想作一个系统,用一个挺长的循环来模拟生产过程,但在此过程中要响应用户的消息,如双击鼠标或点击某菜单,使这个循环暂停来处理一些事务,然后继续循环。请问要如何做到这一点?如果在循环中作不到,可以采取什么别的办法?请高手赐教,如果能点化小生,愿赠1000分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 循环中加上MSG msg;while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg); }msg 中有你需要的消息内容,可以分别处理 详细一点MSG msg;while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if(msg.message==WM_LBUTTONDBLCLK){// 做你需要的工作}......} 中断的想法;收取系统的消息当双击的时候就break,把你要记下的数据放到一个结构里(如循环的次数),响应完.就取得这个结构.继续循环就好了! 楼上说的对。用PeekMessage。 你可以在循环中添加判断消息的机制!用windows下的消息环可以轻松满足!当然也可以自己写!for(;;){ if(value==ture) do(...);} 不要在循环中不停的刷新控件的状态,这样有以下两点不足:1. 刷新太快,不能看见中间结果。这就是为什么你只能看见最后结果的原因。2. 不能接受消息,你没办法在中间修改控件的属性值。所以建议你用Timer,每隔一段时间(如一秒)刷新一次控件状态。这样既可接受外界消息,又可看清变化过程。 这1000分真是太好拿了,我回答过致少N次这种问题,在VC中只要在循环中加入:AfxGetApp()->PumpMessage();即可,它相当于VB中的DoEvent如:for(int i=0; i<1000; i++){ ........//你要处理的东东 AfxGetApp()->PumpMessage();}当然,为此负出的代价是:循环由于要处理PumpMesage,效率[时间上]变低了。 如何用GDI获取cad字库格式 dragdrop求解 请老鸟指点下C++程序员的标准学习之路 及各阶段需要的书籍 又要找工作了,你们都上哪去找啊? 难题(用代码实现在ACTIVEX容器中插入对象) Com组件的中使用线程问题? 这个该怎么办啊? 我把IE的代理设置为自己。然后在1080(在IE也设置)监听,但是得不到数据包 急求助(window编程)设置窗体背景及联想到桌面图像截取 请问硬盘整理程序的原理是什么!? 关于SDK我的了解很少,望诸位兄台给小弟启蒙一下!小地感激不尽! WIN9X中能不能设置线程或进程的优先级?
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msg 中有你需要的消息内容,可以分别处理
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message==WM_LBUTTONDBLCLK)
{
// 做你需要的工作
}
......
}
收取系统的消息
当双击的时候就
break,把你要记下的数据放到一个结构里(如循环的次数),
响应完.就取得这个结构.
继续循环就好了!
用PeekMessage。
for(;;)
{
if(value==ture)
do(...);
}
1. 刷新太快,不能看见中间结果。这就是为什么你只能看见最后结果的原因。
2. 不能接受消息,你没办法在中间修改控件的属性值。所以建议你用Timer,每隔一段时间(如一秒)刷新一次控件状态。这样既可接受外界消息,又可看清变化过程。
AfxGetApp()->PumpMessage();
即可,它相当于VB中的DoEvent
如:
for(int i=0; i<1000; i++)
{
........//你要处理的东东
AfxGetApp()->PumpMessage();
}当然,为此负出的代价是:循环由于要处理PumpMesage,效率[时间上]变低了。