在对话框中设置了一个edit control(ID为IDC_EDIT3),用来实时显示程序的运行情况:
控件关联的变量为CString Step_infoStep_info =Step_info+ _T("\r\n程序执行第一步!");
GetDlgItem(IDC_EDIT3)->SetWindowText(Step_info);每次完成一步都执行这两句,但是每次执行过之后都无法立即在edit control中显示出来,到下一次执行时才会把上一次的显示出来,或者直接啥都不显示!注:是在另外一个线程函数中执行的,无法使用 dlg->Updatedata()函数能否有解决方案或者其他更好的方法?

解决方案 »

  1.   

    你上面的两句是放到线程函数中执行的?你应该在线程中发送自定义消息到UI线程,在UI线程中去更新控件信息
      

  2.   

    Invalidate一下  如果是在其他线程是会有问题的 具体有多少操作是不支持跨线程的我也不清楚 楼上说的发消息肯定可以解决 
      

  3.   

    把dlg地址传给线程函数 再调用updatedate
      

  4.   

    dlg传了啊,这种方法试过,也是不行
      

  5.   

    回LZ 1L的方法也不错 
    你Google下MFC自定义消息就OK了另外我帮你测试下 发现如果使用ID发送消息不会出现你所说的情况
    UINT WINAPI _Thread(LPVOID p)
    {
    static int n=0;
        CKlDlg* dlg=(CKlDlg*)(p);
    char sz[100]="";
    while (1)
    {
      dlg->GetDlgItem(IDC_EDIT1)->SetWindowText(itoa(n++,sz,10));
      Sleep(10);
    }
    return 0;
    }
      

  6.   

    跟踪UpdateData实现 发现用到了线程局部变量 难怪不成
      

  7.   

    线程中不要传递窗口类的指针,改用HWND窗口句柄,线程函数中发送消息到该HWND窗口类中,在窗口类的自定义消息响应函数中去更新控件信息
      

  8.   

     在对话框中设置了一个edit control(ID为IDC_EDIT3),用来实时显示程序的运行情况:
    控件关联的变量为CString Step_infoStep_info =Step_info+ _T("\r\n程序执行第一步!");
    GetDlgItem(IDC_EDIT3)->SetWindowText(Step_info);
    Step_info =Step_info+ _T("\r\n程序执行第一步!"); 不用这句 直接根据ID SetWindowText 
      

  9.   

    问题出现的原因:
    你关联了一个EDIT控件CString变量 这样的话你就需要UpdateData让EDIT的数据换入或者换成到其CString
    后面一句你使用ID来SetWindowText 由于你没有调用UpdateData将数据换到EDIT控件关联的CString 所以EDIT关联的CString是一个空值 所以看起来就没有显示
      

  10.   


    这和UpdateData没关系,他只要SetWindowText就应该显示出来。
    改一下:
    Step_info =Step_info+ _T("程序执行第一步!\r\n");
      

  11.   

    这是UpdateData的用法
    http://blog.csdn.net/qq752923276/archive/2011/04/22/6342871.aspx
    我觉得没有显示应该是LZ的EDIT控件关联的CString变量为空 其实可以测试下 不用EDIT控件关联的变量 使用一个局部变量 如char sz[]="21321";  
    Step_info =Step_info+ _T("程序执行第一步!\r\n"); 呵呵 LZ就是这么做的哦