在正在运行的线程内的cstatic控件的Redrawwindow

时间:2011-08-03 06:50:37

标签: c++ c winapi visual-c++ mfc

我有一个CStatic控件,我想在运行时设置它的文本(计算Fibonacci数)

Class TXT:public CStatic
{
  private:
    CString m_str;
  public:
    SetText(const CString& str)
    {
       m_str=str;
       RedrawWindow();
    }
////other methods OnPaint etc 
}
//someclass that contains 
{
////....
TXT m_res;
///....

}
UINT threadProc(LPVOID lp)
{
   //computing Fibonacci
   p->m_res.SetText("resultTXT"); 
}

我的问题是输出字符串结果相互覆盖;一旦新的输出出现,文本就不会被删除。

我应该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我的猜测是你在主线程(GUI线程)中创建窗口,然后从工作线程调用该窗口上的函数。这将违反规则,因为Windows与创建它们的线程具有亲缘关系。

确保使用窗口句柄的所有API调用都是从主线程进行的。请注意,SendMessage()调用被编组到正确的线程上,但在任何情况下,出于性能原因,它们也最好从主线程发送。