MFC程序,在主线程中显示对话框(无模式对话框),并在另一个线程中调用对话框上的子控件的SetWindowText方法设置文本.
因为在工作线程中要不断更新子控件上的文本,但是却出现了在主线程里设置的文本跟工作线程的文本重叠在一起,导致看不清控件的文本.不知有没有人碰到过这种情况?

解决方案 »

  1.   

    其他线程不直接操作SetWindowText,而是发送消息到主线程UI上来统一SetWindowText更新控件,这样就有消息队列同步
      

  2.   

    我试过用SendMessage发送WM_SETTEXT到指定的控件,但是还是不行.用PostMessage发送,结果什么文本都没有.
      

  3.   

    没有不行的,自己代码有问题
    PostMessage的数据要new出来
      

  4.   

    代码如下:
    ::PostMessage((GetDlgItem(IDC_STATUS))->m_hWnd,WM_SETTEXT,0,(LPARAM)lpszStatus);IDC_STATUS是一个
    CStatic控件的ID,lpszStatus是new出来的.不知有什么错在哪里
      

  5.   

    lpszStatus是个LPCTSTR还是char *
      

  6.   

    sendmessage应该没问题  postmessage需要全局变量
      

  7.   

    俺的建议:
    1、不要用PostMessage,此函数只是将消息放入队列并立马返回,有鉴于此,引用指针会造成不可预知的后果;最好改成SendMessage
    2、当你用工作线程SetWindowText后,建议你让主线程能得到刷新的机会,即进行消息循环(PeekMessage然后PumpMessage),不然恐怕主线程会在它认为合适的时候更新控件Caption,或者根本不更新。
    3、几乎所有的GDI函数都是线程不安全的,建议你采用同步机制