如何防止视图闪烁? 在视图中用一个list中所保存的信息画不现的图标,当滚动视图或改变窗口大小时,这些图标及它们之间的连线闪烁严重。如何解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重载CView::OnEraseBkgnd,函数体内只写一行:return TRUE; 即可搞定 重载CView::OnEraseBkgnd,函数体内只写一行:return TRUE; 在OnPaint 中用内存DC 如果:重载CView::OnEraseBkgnd,函数体内只写一行:return TRUE;那么,当我扩大当前窗口时,扩大部分将显示拖动的轨迹,显然不合要求.而且滚动后原有的没有被擦去.显示的是一片混乱.而所有显示信息保存在内存中以一幅图的形式。我的上一个版本就是这么做的,但也存在这个问题,而且,我的描画范围可以很大,用图好像也太费内存了. 1、用内存位图2、取剪裁区,在剪裁区内则重画3、背景不重画这是普遍采用的方法。例:在onpaint中,用以下代码,而在ondraw中则作图 CPaintDC dc(this); // device context for painting OnPrepareDC(&dc); RECT ClipBox; dc.GetClipBox(&ClipBox); HDC hDC = dc.GetSafeHdc(); HDC hMemDC = ::CreateCompatibleDC(hDC); HBITMAP Bitmap = ::CreateCompatibleBitmap(hDC, ClipBox.right - ClipBox.left, ClipBox.bottom - ClipBox.top); HBITMAP OldBitmap = (HBITMAP)::SelectObject(hMemDC, Bitmap); ::SetWindowOrgEx(hMemDC, ClipBox.left, ClipBox.top, NULL); CDC MemDC; MemDC.Attach(hMemDC); OnDraw(&MemDC); ::BitBlt(hDC, ClipBox.left, ClipBox.top, ClipBox.right - ClipBox.left, ClipBox.bottom - ClipBox.top, hMemDC, ClipBox.left, ClipBox.top, SRCCOPY); ::SelectObject(hMemDC, OldBitmap); ::DeleteObject(Bitmap); ::DeleteDC(hMemDC); CSocket信息转发 请教问题,stdafx.h和stdafx.cpp 可不可以用自定义的名字? 在vs里面如何设置才能让dll与lib放到不同的目录里面? 关于对话框字体的问题 100分求MSDN2003下载 怎样改变按钮的背景和文字顔色??? 一个想做程序员的悲哀! 如何安装VS2010的本地MSDN vs2005 CString 问题 砸150分求解最简单的问题,关于怎样定义全局变量,回答对了马上就给分. 一般把什么样的功能封装成一个ACTIVEX控件比较合适? windows网络编程技术(在线等...)
2、取剪裁区,在剪裁区内则重画
3、背景不重画
这是普遍采用的方法。
例:在onpaint中,用以下代码,而在ondraw中则作图 CPaintDC dc(this); // device context for painting
OnPrepareDC(&dc);
RECT ClipBox;
dc.GetClipBox(&ClipBox);
HDC hDC = dc.GetSafeHdc();
HDC hMemDC = ::CreateCompatibleDC(hDC);
HBITMAP Bitmap = ::CreateCompatibleBitmap(hDC, ClipBox.right - ClipBox.left,
ClipBox.bottom - ClipBox.top);
HBITMAP OldBitmap = (HBITMAP)::SelectObject(hMemDC, Bitmap);
::SetWindowOrgEx(hMemDC, ClipBox.left, ClipBox.top, NULL);
CDC MemDC;
MemDC.Attach(hMemDC);
OnDraw(&MemDC); ::BitBlt(hDC, ClipBox.left, ClipBox.top, ClipBox.right - ClipBox.left,
ClipBox.bottom - ClipBox.top, hMemDC, ClipBox.left, ClipBox.top, SRCCOPY);
::SelectObject(hMemDC, OldBitmap);
::DeleteObject(Bitmap);
::DeleteDC(hMemDC);