先按下一个按钮,这时开始循环,然后再次按下这个按钮,就停止循环。应该怎么做?必须得用多线程吗??请指教

解决方案 »

  1.   

    不需要,只要在这个循环里面加入消息循环就可以了
    getmessage(.....)
    translatemessage(.........);
    dispatchmessage(.........);
      

  2.   

    //在循环中加入消息处理即可
    //主要代码如下BOOL bRet;
    while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
    {
      if (bRet == -1)
      {
       //处理出错。
      }
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
      

  3.   

    这样为什么不行现在CXXXXXView类的头文件中定义了#define WM_GRAB (WM_USER+100)以及afx_msg void OnGrab();源文件中ON_MESSAGE(WM_GRAB, OnGrab)//消息函数
    void CXXXXXView::OnGrab() 
    {
    // TODO: Add your command handler code here
    // 做一些处理
    }我就想让这个按钮按下后就开始循环,然后再按下就停止,代码如下,IsStop是个全局变量初始化为FALSE
    void CXXXXXView::OnGrabsingle() 
    {
    // TODO: Add your command handler code here
    if (IsStop==FALSE)
    {
    IsStop=TRUE;

    else
    {
    IsStop=FALSE;
    }
        while (IsStop)
    {
            SendMessage(WM_GRAB);
    }
    }
    按下按钮没问题,可是想停止就不行了,怎么回事。
      

  4.   

    如果你不在乎时间,可以用一个1ms的TIMER。
      

  5.   

    你循环体 在 OnGrabsingle()  ,阻塞了主线程。 
      

  6.   

    能帮我给出正确的解吗就用
    BOOL bRet;
    while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
    {
      if (bRet == -1)
      {
       //处理出错。
      }
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    这种方法,能具体点不