环境:vc++6.0 xp,我的语句如下:
str.Empty(); //清空,让显示内容为空
m_Edit.SetWindowText(str);//在编辑框控件中,显示串
UpdateData(FALSE); //FALSE更新视图内数据
Sleep(15000); //这之前,编辑框内应该显示为空,停顿15秒。但在执行时看不到,而是直接执行到后面的"2008,北京欢迎您!"; str="2008,北京欢迎您!";
m_Edit.SetWindowText(str);
UpdateData(FALSE);
str.Empty(); //清空,让显示内容为空
m_Edit.SetWindowText(str);//在编辑框控件中,显示串
UpdateData(FALSE); //FALSE更新视图内数据
Sleep(15000); //这之前,编辑框内应该显示为空,停顿15秒。但在执行时看不到,而是直接执行到后面的"2008,北京欢迎您!"; str="2008,北京欢迎您!";
m_Edit.SetWindowText(str);
UpdateData(FALSE);
如果你在一个按钮的消息处理函数中使用这些语句,譬如在OnOK中使用,就可以看到效果。
void CSleepTextDlg::OnOK()
{
// TODO: Add extra validation here
CString str;
str.Empty(); //清空,让显示内容为空
m_Edit.SetWindowText(str);//在编辑框控件中,显示串
UpdateData(FALSE); //FALSE更新视图内数据
Sleep(15000); //这之前,编辑框内应该显示为空,停顿15秒。但在执行时看不到,而是直接执行到后面的"2008,北京欢迎您!";
str="2008,北京欢迎您!";
m_Edit.SetWindowText(str);
UpdateData(FALSE); //CDialog::OnOK();
}
可以在Sleep之前调用UpdateWindow(),让窗口立即响应WM_PAINT消息。
{
CString str;
str.Empty(); //清空,让显示内容为空
m_Edit.SetWindowText(str);//在编辑框控件中,显示串
UpdateData(FALSE); //FALSE更新视图内数据
Sleep(15000); //这之前,编辑框内应该显示为空,停顿15秒。但在执行时看不到,而是直接执行到后面的rs
str=rs;
m_Edit.SetWindowText(str);
UpdateData(FALSE);
}
UpdateData(FALSE);
Sleep(15000); //这时候线程挂起,无法更新界面(更新界面是通过WM_PAINT消息,这时候线程挂起没法处理消息)。
//线程重新唤醒后,马上就更新为str="2008,北京欢迎您!"; 前面的过程就看不到了。
,
m_Edit.UpdateWindow(); Sleep(15000);