void CtestoutDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代 m_test_ctrl.SetWindowText(_T("ok out out"));
       //UpdateWindow(); for (int i=0;i<100;i++)
{
Sleep(50);
}
}在一个按钮的响应函数中要更改界面中一个editbox控件的值,如上述代码 为什么运行时要等到OnBnClickedOk()这个消息响应函数运行完毕时才会显示出内容呢? 是不是跟消息的响应顺序有关?求解释~ 谢谢

解决方案 »

  1.   

    你用Sleep(50);干嘛,把程序挂起来当然没反映啊.
      

  2.   

    按钮的响应事件(响应函数)和 刷新editbox控件的值在一个线程里,只能是一个一个执行的
    代码:
      {
    Sleep(50);
    }
    线程睡眠,啥都不干了,要等到按钮的响应事件结束后才去刷新editbox控件的值。
      

  3.   

    还没等到显示,就进入Sleep了
      

  4.   

    在单线程的程序中,程序是从上往下执行,你的OnBnClickedOk函数还没执行完你怎么可能看到效果呢?
      

  5.   

    板凳的解释很到位,你进入sleep之后thread睡眠,除非你的消息响应结束,控件中的内容才会被刷新显示
      

  6.   

    楼主这种思维方式是学习windows程序开发中常遇到的问题,思维方式还停留在DOS,TC环境下,串行运行程序的理解方式。windows程序,尤其是MFC程序的结构属于消息驱动的并行结构,我估计楼主是要实现延时自动修改edit内容的显示效果,如果是的话,应该使用定时器实现,而不是sleep()函数