在对话框的OnPaint()中绘图。使用LineTo、MoveTo等画图。
当别的窗口在上边移动时,图形会闪烁的很厉害。这种情况有没有解决的办法?
当别的窗口在上边移动时,图形会闪烁的很厉害。这种情况有没有解决的办法?
解决方案 »
- 请问一个处理数据的问题?
- 一个纠结了我好多的天的GetProcAddress返回值问题!求助高手!!!
- 通过timer实现edit滚动显示文本时的问题
- 谁有《vc++6.0案例开发集锦》这本书的源码
- 怎样 捕获 拖放到 继承自CDHtmlDialog对话框 的 文件?
- VC编程,如何获得IE浏览器所打开网页中链接或控件在IE浏览器窗口客户区中的坐标
- 请问在 vc6.0 中怎样得到视屏缓冲区的地址?
- 请教关于从组合框中提取字符串的问题!
- 一个unix下的送分小问题!!来者有分!!!
- 如何从ChtmlView中得到他使用的接口IWebBrowser2?
- Warning: Uncaught exception in WindowProc (returning 0).
- 求高手重写SetWindowText函数,谢谢.....
建议改动 OnEraseBkGnd 中的内容!
不需要整个窗口重绘。
思路是先获得需要重绘的区域CRng,然后调用CDC::SelectClipRgn(),把这个区域选入DC中
CSDN中可以搜到一大摞双缓存解决闪烁问题的。自己找找吧。
// 取画布矩形和它的DC
CRect rect;
CWnd *pWnd = GetDlgItem(IDC_PICTURE_LINK);
pWnd->GetClientRect(rect);
CDC *pDC = pWnd->GetDC();
// 创建内存DC
CDC memDC;
memDC.CreateCompatibleDC(NULL); // 建立一个与屏幕显示兼容的位图
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); // 将位图选入到内存显示设备中
CBitmap *oldBitmap = memDC.SelectObject(&memBitmap); // 在内存DC上绘图
m_sctDraw->DrawSCT(rect, &memDC); // 绘图函数
// 复制内存位图
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); // 清理
memDC.SelectObject(oldBitmap);
memBitmap.DeleteObject();
memDC.DeleteDC();
ReleaseDC(pDC);