繁体   English   中英

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

[英]Redrawwindow of a cstatic control within a running thread

我有一个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线程)中创建窗口,但是随后从辅助线程在该窗口上调用函数。 因为Windows与创建它们的线程具有亲和力,所以这将违反规则。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM