|
本人在做wince时钟显示界面时遇到了点问题,希望能够在这里得到解答
这是OnPaint函数,设置了定时器每55ms刷新调用Invalidate(),强制发送消息WM_PAINT
DrawNeedle()函数是用来绘制指针的,因为每55ms要绘制一直CPen,必须在OnPaint里做重绘的处理,否则会留下的痕迹
OnPaint中用了双缓冲防止闪烁,现在要显示的内容画到memDC对应的cBitmap上,最后在画到DC上
问题:程序运行了一段时间后,指针反映会变慢,原来以为是内存的问题,可是发现内存使用率一直都很稳定,看了下CPU使用的情况,正常时用25ms,一个时间片,很卡的时候就会用到三个时间片,但是不知道到底是什么原因引起的,希望能得到解答
- void XXXX::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- // TODO: 在此处添加消息处理程序代码
- // 不为绘图消息调用 CDialog::OnPaint()
- CDC memDC;
- CBitmap cBitmap;
- CBitmap* pOldMemBmp = NULL;
- cBitmap.CreateCompatibleBitmap( &dc,320,240);
- memDC.CreateCompatibleDC(&dc);
- pOldMemBmp = memDC.SelectObject(&cBitmap);
- DrawBmp(&memDC,IDB_BACKGROUND,&rBackground);//总背景320*240
- DrawBmp(&memDC,IDB_PANEL_BK,&rPanel);//时钟表盘背景
-
- CString strSpd;
- strSpd.Format(_T("%d"),Angle);
- DrawText(&memDC,&strSpd,&rText);
- DrawNeedle(Angle,&memDC);//使用CPen绘制Needle,
- dc.BitBlt
- (0,
- 0,
- 320,
- 240,
- &memDC,
- 0,0,SRCCOPY);
- //清空内存
- memDC.SelectObject(pOldMemBmp);
- memDC.DeleteDC();
- cBitmap.DeleteObject();
- delete pOldMemBmp;
- }
复制代码
|
|