InvalidateRect cpu占用率过高问题求助

gdboyi 2013-08-27 07:53:47
图上那部分曲线只用用Invalidata()才能刷出来,但是CPU使用率能达到100%,有没有降低的方法呢
void CRamanDlg::OnPaint()
{
CRect rectClient, rectTemp;
CBitmap bitmapTemp, *pOldBitmap;
CDC dcMem;
CString strXcoordinate;
CString str;
CPaintDC dc(this);
CPoint ptStart1,ptEnd1,ptStart2,ptEnd2;

//Get client dailog Rectangle szie
GetClientRect(rectClient);

//create bitmap memory source
bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
dcMem.CreateCompatibleDC(&dc);//create compatible with dc
pOldBitmap = dcMem.SelectObject(&bitmapTemp);
dcMem.FillSolidRect(rectClient, RGB(0, 0, 0));

//get the border size
rectTemp.top = rectClient.top+30;
rectTemp.bottom = rectClient.bottom-40;
rectTemp.left = rectClient.left+130;
rectTemp.right = rectClient.right-25;
//设置坐标点
ptStart1.SetPoint(m_ptSx,rectTemp.top);
ptEnd1.SetPoint(m_ptSx,rectTemp.bottom);

ptStart2.SetPoint(m_ptEx,rectTemp.top);
ptEnd2.SetPoint(m_ptEx,rectTemp.bottom);

DrawCoordinate(&dcMem, rectTemp);
DrawSpectrum(&dcMem, rectTemp);

DrawLine(&dcMem,ptStart1,ptEnd1);
DrawLine(&dcMem,ptStart2,ptEnd2);
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &dcMem, 0, 0, SRCCOPY);

//////////////////////////////////////////////////////////////////////////
GetMarkValue();

CString pty;
pty.Format(L"当前值:%.2f",m_Mark1);
//pty = L"当前值:"+pty;
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,0,0));
dc.ExtTextOut(rectClient.left+120,rectClient.top+245,ETO_CLIPPED,CRect(rectClient.left+120,rectClient.top+220,rectClient.left+270,rectClient.top+260),pty,NULL);//Set the coordinate disp pace

str.Format(L"平均值:%.2f",m_Mark2);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,0,0));
dc.ExtTextOut(rectClient.left+10,rectClient.top+245,ETO_CLIPPED,CRect(rectClient.left+10,rectClient.top+220,rectClient.left+100,rectClient.top+260),str,NULL);

dcMem.SelectObject(pOldBitmap);
m_rectClient = rectClient;

strXcoordinate.Format(m_DispXUint);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,0,255));
dc.ExtTextOut(rectClient.left+220,rectClient.top+245,ETO_CLIPPED,CRect(rectClient.left+220,rectClient.top+220,rectClient.left+360,rectClient.top+260),strXcoordinate,NULL);

CEdit *Rev_Text = (CEdit *)GetDlgItem(IDC_EDIT_REV);
Rev_Text->SetWindowText(m_strRecvData);

dcMem.DeleteDC();
InvalidateRect(rectClient,FALSE);
}
...全文
384 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2013-08-29
  • 打赏
  • 举报
回复
引用 4 楼 accessysq 的回复:
画完了还为什么要InvalidateRect呢?这样会一直OnPaint
是啊 OnPaint 画完了再 InvalidateRect,会无休止的 OnPaint
  • 打赏
  • 举报
回复
画完了还为什么要InvalidateRect呢?这样会一直OnPaint
91program 2013-08-28
  • 打赏
  • 举报
回复
OnPaint() 中调用 InvalidateRect 是不对的?至少要判断了数据有更新再调用 InvalidateRect 吧
91program 2013-08-28
  • 打赏
  • 举报
回复
刷新太频率了,一直在 Paint 肯定会出现 CPU 使用率高的现象。 LZ,显示不需要这么频率吧?
gdboyi 2013-08-27
  • 打赏
  • 举报
回复

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧