void CMy1234Dlg::OnButton1() 
{
// TODO: Add your control notification handler code here
int a;
CString str;
for(a=0;a<20;a++)
{
Sleep(1000);
str.Format("%d",a);
SetDlgItemText(IDC_EDIT1,str);
}

}
在对话框中我想实现按下键后,编辑框显示str的每一次变化。可是运行起来,结果都是一段时间后直接显示最后结果,不知道是什么原因,该怎么改变?

解决方案 »

  1.   

    用Timer设定一个时间间隔,每隔一段时间显示一个结果
      

  2.   

    SLEEP把整个线程都停了,没法去响应界面更新
    要想动态显示,还是用TIMER
      

  3.   

    你那里Sleep把主线程阻塞了,也就不能处理消息了要用多线程或者定时器来显示,如果只是你这个简单功能也可用以下方法来做int a; 
    CString str; 
    for(a=0;a <20;a++) 

        str.Format("%d",a); 
        SetDlgItemText(IDC_EDIT1,str);  MSG msg;
    while( ::PeekMessage(&msg,NULL,0,0,PM_REMOVE) )
    {
    ::TranslateMessage( &msg );
            ::DispatchMessage( &msg );
    }

    Sleep(1000); } 
      

  4.   

    这样就可以了。 int a; 
    CString str; 
    for(a=0;a <20;a++) 

    Sleep(1000);
    str.Format("%d",a); 
    CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SHOW);
    pEdit->SetWindowText(str);
    SetDlgItemText(IDC_STATIC_SHOW,str);
    UpdateWindow();//添加这句就可以了
    }
      

  5.   

    void CMy1234Dlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    int a;
    for(a=0;a<20;a++)
    {
    Sleep(1000);
    m_str.Format("%d",a);
    SetTimer(1,   1000,   0);  
    }

    }void CMy1234Dlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    SetDlgItemText(IDC_EDIT1,m_str);
    KillTimer(1);
    CDialog::OnTimer(nIDEvent);
    }
    这样吗?结果还是一样没变啊?
      

  6.   

    楼主,主线程根本都没堵塞,只是没有刷新出数据来而已。我说的方法绝对是可以的,我自己新建工程试验了void CMy1234Dlg::OnButton1() 

    // TODO: Add your control notification handler code here 
    int a; 
    CString str; 
    for(a=0;a <20;a++) 

    Sleep(1000); 
    str.Format("%d",a); 
    SetDlgItemText(IDC_EDIT1,str);UpdateWindow();//添加这句就可以了} } 
      

  7.   

    wutaihua
    你的方法可以显示变化,可是程序结束后,编辑框中的内容没了,要让他保留该怎么办?
      

  8.   

    Conry
    我试了下你的方法,可是只能显示个0,然后就没显示了
      

  9.   

    我这编辑的工程最后编辑框并没有消失,你要看看,最后,你赋值给编辑框的文本到底是什么。
    我做了一个STATIC TEXT,一个EDIT CONTROL。文本框不需要Updatawindow()这句就可以显示。而EDIT CONTROL却需要刷新的这句。你也用类似的方法来比较,我觉得是你程序中可能赋值到最后的时候,进行了多余的操作。最好debug下,单步调试,看下最后的时候的值。
    我的代码是这样的void CWinAppTestDlg::OnOK() 
    {
    int a; 
    CString str; 
    for(a=0;a <20;a++) 

    Sleep(1000);
    str.Format("%d",a);  SetDlgItemText(IDC_EDIT_SHOW, str);//设置EDIT
    SetDlgItemText(IDC_STATIC_SHOW,str);//设置STATIC
    UpdateWindow();
    }

    // CDialog::OnOK();
    }效果就是这两个同步显示。你试试。