正在运行的线程中静态控件的重绘窗口

Redrawwindow of a cstatic control within a running thread

本文关键字:窗口 静态控件 线程 运行      更新时间:2023-10-16

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

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"); 
}

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

我还应该做什么来解决这个问题?

我的猜测是,您正在主线程(GUI线程)中创建窗口,但随后从工作线程调用该窗口上的函数。这是违反规则的,因为窗口与创建它们的线程有关联。

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