启动EXE之后,调WaitForSingleObject,在等待时,怎么令已经disable的窗口不会花掉? EnableWindow(FALSE);
if (RunExe(A2T(szCommandLine), SW_RESTORE, NULL, &ProcInfo) == FALSE)
{
return;
}

WaitForSingleObject(ProcInfo.hProcess, INFINITE); CloseHandle(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);在WaitForSingleObject时,disable的窗口不能及时刷新页面,窗口会变花花地,想请教怎么解决这个问题。

解决方案 »

  1.   

    WaitForSingleObject阻塞了主线程,你应该放到另外一个线程里
      

  2.   

    把WaitForSingleObject(ProcInfo.hProcess, INFINITE)放到一个新的线程中。
      

  3.   

    对的,最简单的就是 AfxBeginThread 吧
      

  4.   

    你把WaitForSingleObject(ProcInfo.hProcess, INFINITE)放到一个新的线程中。
    然后用一个成员变量来控件光标状态就OK了.
      

  5.   

    你在启动线程前切换光标,然后当WaitForSingleObject(ProcInfo.hProcess, INFINITE)返回时,用SendMessage发一个自定义消息通知主线程。在主线程中的消息处理中再把光标切换回来就可以了。
      

  6.   

    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT)); AfxBeginThread((AFX_THREADPROC)ThreadProc, this);我用的是SetCursor但是没用,我又用了下
    //SetClassLong(GetSafeHwnd(), 
    // GCL_HCURSOR, 
    // (LONG)(AfxGetApp()->LoadStandardCursor(IDC_WAIT)));
    //SetClassLong(m_List.GetSafeHwnd(), 
    // GCL_HCURSOR,
    // (LONG)(AfxGetApp()->LoadStandardCursor(IDC_WAIT)));
    这个SetClassLong,要把窗口上的每个控件都设一遍才行,而且鼠标在标题栏的时候还是箭头,不会变沙漏……哎
      

  7.   

    hehe,我以前遇到同样的问题,有时候希望程序停住一下再继续执行,但又希望不影响界面刷新。就像弹出一个messagebox一样。 要想实现这样的效果,最简单的办法是自己写一个消息循环。 第2种办法是造一个看不见的messagebox(我开始就是这个干的)。不要觉得消息循环有多难,对于这样的要求很简单的
    MSG msg;
    while( 1 )
    {
       if( PeekMessage( msg, ???REMOVE ) )
    {
    translatemsg(msg);
    dispatchmsg(msg);
    }
    else
    {
      uint ret =  WaitForsgobjet( h, 100 );
      if( ret == WAITOBJET_0 )
    {
    BREAK;
    }
    }
    }
      

  8.   

    开县城的话,鼠标设定要重载你主截面的Onsetcursor
    在里面设定不鼠标,并不调用它自己的哦女色tcursor
      

  9.   

    WaitForSingleObject阻塞了线程,导致没法响应消息,所以界面不能更新。你可以用定时检查的方式,调用WaitForSingleObject最后参数给0,如果返回WAIT_OBJECT_0,就说明进程已经结束。
      

  10.   

    谢谢“allenhiman”,你的答案很切合重点。