1.基于对话框的mfc程序中,窗口有个static text 控件,id 为IDC_Status
  右键它,选择classwizard,在member variables中,选中IDC_Status控件,
  然后add Variable,弹出的窗口中取名为m_Status, Category为Value2.在窗口某按钮事件
写下
m_Status="OK!";
UpdateData(FALSE);
或者
SetDlgItemText(IDC_Status,"OK!")
都没问题。但是如果我在这按钮事件启动一个子线程,(按钮事件语句AfxBeginThread(MfcThreadProc, (LPVOID)this );)
在子线程中怎么写语句使得产生上面效果?子线程函数:
UINT MfcThreadProc(LPVOID lpParam)
{
   //在这里添加什么语句可以更改m_Status的text值
   return 0;
};

解决方案 »

  1.   

    子线程中发送一个消息PostMessage,然后主线程中SetDlgItemText(IDC_Status,"OK!")  修改
      

  2.   

    MFC中很多的函数都省略句柄,其实就是调用this指针,所以你在子线程里面无法设置成功。解决办法就是按照一楼的就可以。或者在子线程里面取得父线程中对话框的句柄,再设置按钮文本也可以。不建议在MFC工程用使用postmessage
      

  3.   

    UINT MfcThreadProc(LPVOID lpParam) 

      //在这里添加什么语句可以更改m_Status的text值 
      (CWnd*) pThis = (CWnd*)lpParam;
      pThis->SetDlgItemText(IDC_Status,"OK!");
      return 0; 
    };可以这样做,因为 SetDlgItemText 本质也是发消息。
      

  4.   

    哦,但要注意的是,这种方法使用不当就会导致线程死锁。PostMessage 是个不错的选择。
      

  5.   

    非常感谢楼上几位老师,CSDN真的不错,让我学到了好多,嘻嘻。杀手K老师的方法挺管用,但是注意线程死锁不太懂,不知道要怎么注意。3楼的云淡风轻老师是不是写少了一个字?
    不建议在MFC工程用使用postmessage?
    是建议使用吧?另外,我google了postmessage的用法,
    好像挺麻烦的,不太会用,能大概讲一下吗?
      

  6.   

    我重新开个帖请教postmessage怎么实现吧,
    再次谢谢楼上的老师们,
    谢谢CSDN,
    谢谢CCTV
      

  7.   

    我其实也只是个没玩多久的新人而已.不建议使用postmessage是我个人的想法~不过,我也很少用MFC工程.公司里面都是做底层开发,都是用sdk来实现