有个项目用到了开源的ChartCtrl画曲线图,我开启了EnableRefresh(false)让控件自动刷新,然后当有数据来时调用
pLineSerie1->ClearSerie();
pLineSerie1->AddPoints(x, dYValue,DATA_COUNT);
画坐标曲线,运行一段时间后会出现报错,afxwin1.ini 666行错误,错误代码是:
VERIFY(::GetTextExtentPoint32(m_hAttribDC, lpszString, nCount, &size));
我百度下,发现有一个帖子和我类似
http://bbs.csdn.net/topics/270071437
大概原因是”工作线程调用添加点的函数AddPoint(),AddPoint()返回前都要调用CWnd::Invalidate()让ChartCtrl客户区无效,并产生一条WM_PAINT消息到窗口的消息队列中,未等WM_PAINT消息处理之前,Invalid()就返回了,未重画前,应该客户区的CDC对象也可能无效。
但如果工作线程在此时来刷新窗口时,使用到的CChartCtrl的客户区的CDC对象可能无效(在调用了Invalidate()之后、WM_PAINT消息处理之前),所以导致了GetTextPoint32()函数失败“
但是这个问题怎么解决呢,画图的时候禁止主界面刷新么,或者主界面绘图的时候禁止画曲线图么