在GetDlgItem(IDC_TISHI_STATIC)->SetWindowText("文字");之后
用Sleep(4000);
就有可能不及时显示上述文字??怎么解决呢???

解决方案 »

  1.   

    因为sleep就是强制让出CPU,显示的效果还没来得及处理
      

  2.   

    不错sleep会出现这样的情况,最好在有显示的语句与sleep间再插些代码
      

  3.   

    之所以会出现这样的情况是因为:
    Windows的应用程序是消息驱动的
    SetWindowText操作实际上是给窗口发送一个WM_SETTEXT消息
    而此时Sleep(4000)的时候还没有到达GetMessage
      

  4.   

    因此也就不会响应WM_SETTEXT消息,即是重绘还未进行
    解决的办法自己想吧,呵呵
      

  5.   

    强迫使窗口处理函数让出CPU资源给Sleep语句。
      

  6.   

    在GetDlgItem(IDC_TISHI_STATIC)->SetWindowText("文字");之后
    如果用Sleep(4000);
    之前向文本框发送了WM_SETTEXT消息,窗口处理函数可能没来得及处理,然后就执行了
    Sleep函数,这样界面线程可能被阻塞,导致没有反映,在4秒之后,才看到变化结果。可以创建一个工作者线程,用线程就可以很好的解决这一点:UINT MyThread(LPVOID pParam)
    {
    CGraphictestDlg *pDlg=(CGraphictestDlg *)pParam;
    pDlg->GetDlgItem(IDC_EDIT1)->SetWindowText("aa");
    Sleep(4000);
    return 0;
    }void CGraphictestDlg::OnButtonTest() 
    {
    AfxBeginThread(MyThread,this);
    }可以看到,文本马上就会变化,而不是在4秒之后才变化。
      

  7.   

    使用线程的话,发出去的WM_SETTEXT消息,由窗口的处理函数进行处理,而Sleep让工作者线程进入休眠状态,而不是让界面线程进入休眠状态,这样就不会出现“不能及时显式”的问题了。
      

  8.   

    其实随便加一个空函数就应该可以了。
    GetDlgItem(IDC_TISHI_STATIC)->SetWindowText("文字");
    GetWindow();
    Sleep(4000);
      

  9.   

    用消息驱动来解释我觉得难让人信服,向文本框发送WM_SETTEXT用的是SendMessage()应该是消息处理完后才返回的,我宁愿理解为VC或Windows系统的一个bug,因为这样的情况不合常理。
      

  10.   

    void MySleep(int milliseconds)//延时毫秒
    {
    DWORD dwStart = GetTickCount();
    DWORD dwEnd = dwStart;
    do
    {  
    MSG  msg;  
    GetMessage(&msg,NULL,0,0);  
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
    dwEnd = GetTickCount();  
    } while((dwEnd - dwStart)  <=  milliseconds); 
    }