求助:CDC毫秒级作图

shepher 2009-09-23 09:10:44
需要做一个表盘,在微秒级的级别下刷新表盘指针,现在的代码如下

dJD = CenterLevel; //度数
sTmp.Format("%.2f", dJD);
GetDlgItem(IDC_360_EDIT)->SetWindowText(sTmp);//界面框中显示
if ((dJD > 0) && (dJD <= 90))
dJD = 90 - dJD;
else
dJD = 360 - (dJD - 90);
dJD = dJD * 3.1415926 / 180;//弧度
iX = cos(dJD) * 60;
iY = sin(dJD) * 60;

pDC = GetDlgItem(IDC_360)->GetDC();
dcMem360.CreateCompatibleDC(pDC);//在内存中建造了DC
CBitmap* pOldBmp = dcMem360.SelectObject(&bmp_360);
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0, 0, 170, 170, &dcMem360, 0, 0, SRCCOPY);
//绘图
pOldpen = pDC->SelectObject(&pen);
nOldRop = pDC->SetROP2(R2_NOTXORPEN);

pDC->MoveTo(85, 85);
pDC->LineTo(85 + iX, 85 - iY);
pDC->SetROP2(nOldRop);
pDC->SelectObject(pOldpen);
//绘图完成后的清理
ReleaseDC(&dcMem360);


bmp_360 为窗体类定义的Bitmap,已载入底图
我的想法是每次画图前载入原始图像,在窗体中显示后在上面重新画

现在的问题是在2毫秒的情况下执行一段时间(5分钟左右)
程序提示内存访问错误,请问上面的执行有问题吗?有没有更好的方法进行处理?

...全文
59 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shepher 2009-09-30
  • 打赏
  • 举报
回复
哎,老了,忘了这基本的了
chenzhongxiang123 2009-09-23
  • 打赏
  • 举报
回复
你需要释放内存啊。每次都把内存读进去了 但是没有释放
klkvc386 2009-09-23
  • 打赏
  • 举报
回复
Mark
fandh 2009-09-23
  • 打赏
  • 举报
回复
DeleteDC(dcMem360);
GetDlgItem(IDC_360)->ReleaseDC( pDC );
shepher 2009-09-23
  • 打赏
  • 举报
回复
......
marrco2005 2009-09-23
  • 打赏
  • 举报
回复
dc 没有释放
//绘图完成后的清理
ReleaseDC(&dcMem360); // 如果 dcMem360 是局部变量,那这句就是多余的
加上一句
GetDlgItem(IDC_360)->ReleaseDC( pDC );
WuXinyang 2009-09-23
  • 打赏
  • 举报
回复
内存泄漏.

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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