我想作一个系统,用一个挺长的循环来模拟生产过程,但在此过程中要响应用户的消息,如双击鼠标或点击某菜单,使这个循环暂停来处理一些事务,然后继续循环。
请问要如何做到这一点?如果在循环中作不到,可以采取什么别的办法?
请高手赐教,如果能点化小生,愿赠1000分

解决方案 »

  1.   

    循环中加上MSG msg;
    while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);  
    }
    msg 中有你需要的消息内容,可以分别处理
      

  2.   

    详细一点
    MSG msg;
    while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    if(msg.message==WM_LBUTTONDBLCLK)
    {
    // 做你需要的工作
    }
    ......
    }
      

  3.   

    中断的想法;
    收取系统的消息
    当双击的时候就
    break,把你要记下的数据放到一个结构里(如循环的次数),
    响应完.就取得这个结构.
    继续循环就好了!
      

  4.   

    楼上说的对。
    用PeekMessage。
      

  5.   

    你可以在循环中添加判断消息的机制!用windows下的消息环可以轻松满足!当然也可以自己写!
    for(;;)
    {
      if(value==ture)
         do(...);
    }
      

  6.   

    不要在循环中不停的刷新控件的状态,这样有以下两点不足:
    1. 刷新太快,不能看见中间结果。这就是为什么你只能看见最后结果的原因。
    2. 不能接受消息,你没办法在中间修改控件的属性值。所以建议你用Timer,每隔一段时间(如一秒)刷新一次控件状态。这样既可接受外界消息,又可看清变化过程。
      

  7.   

    这1000分真是太好拿了,我回答过致少N次这种问题,在VC中只要在循环中加入:
    AfxGetApp()->PumpMessage();
    即可,它相当于VB中的DoEvent
    如:
    for(int i=0; i<1000; i++)
    {
     ........//你要处理的东东
     AfxGetApp()->PumpMessage();
    }当然,为此负出的代价是:循环由于要处理PumpMesage,效率[时间上]变低了。