我有一个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");
}
我的问题是输出字符串结果相互覆盖;一旦新的输出出现,文本就不会被删除。
我应该怎么做才能解决这个问题?
答案 0 :(得分:0)
我的猜测是你在主线程(GUI线程)中创建窗口,然后从工作线程调用该窗口上的函数。这将违反规则,因为Windows与创建它们的线程具有亲缘关系。
确保使用窗口句柄的所有API调用都是从主线程进行的。请注意,SendMessage()
调用被编组到正确的线程上,但在任何情况下,出于性能原因,它们也最好从主线程发送。