在MFC中,要出现等待光标,定义CWaitCursor类的对象即可,可是这个时候的问题是,虽然光标变成了沙漏型,但依然可以点击按钮等各种操作,一般情况下,当光标变成沙漏形状,鼠标点击任何东西都是不应该会响应的,直到那个造成等待的操作执行完成。
请各位前辈指点,谢了!

解决方案 »

  1.   

    在函数的开头定义CWaitCursor waitcursor;
    中间用了waitcursor.Restore();
             BOOL SucFlag = FALSE; // 返回确认信息标记
    MSG msg;
    DWORD dwStartTime = 0, dwEndTime = 0;
    dwStartTime = dwEndTime = GetTickCount();
    while( (dwEndTime - dwStartTime) < 3000 )
    {
    DWORD len;
    BYTE retChar = 0;
        ReadFile(m_hCom, &retChar, 1, &len, &m_osRead);
    if( retChar == 0x59 ) // 返回确认帧
    {
    //DWORD ttt;
    //GetOverlappedResult(m_hCom,&m_osRead,&ttt,TRUE);
    SucFlag = TRUE;
    break;
    }
    while( ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
    {
    ::TranslateMessage( &msg );
    ::DispatchMessage( &msg );
    }
    waitcursor.Restore();
    dwEndTime = GetTickCount();
    }
      

  2.   

    没有必然联系。一般是因为无法响应,才把光标变成沙漏。忙完了再把光标变回来。
    你可以在响应某消息时设沙漏,干点别的再设回来,然后返回,这期间鼠标点不动。
    如果你要退出消息响应,那就要自己做了,比如菜单变灰等。不然即使鼠标不点,人用键盘还是可以触发WM_COMMAND的