[quote=引用 12 楼 pcradio 的回复:] [quote=引用 11 楼 shenjiu04 的回复:] [quote=引用 10 楼 pcradio 的回复:] bm.bmWidth bm.bmHeight值对不对? 这两句去掉,析构函数会自己调用的: Bitmap.DeleteObject(); MemDC.DeleteDC();
[quote=引用 11 楼 shenjiu04 的回复:] [quote=引用 10 楼 pcradio 的回复:] bm.bmWidth bm.bmHeight值对不对? 这两句去掉,析构函数会自己调用的: Bitmap.DeleteObject(); MemDC.DeleteDC();
[quote=引用 10 楼 pcradio 的回复:] bm.bmWidth bm.bmHeight值对不对? 这两句去掉,析构函数会自己调用的: Bitmap.DeleteObject(); MemDC.DeleteDC();
bm.bmWidth bm.bmHeight值对不对? 这两句去掉,析构函数会自己调用的: Bitmap.DeleteObject(); MemDC.DeleteDC();
你不用双缓冲时,你自己通过SetBitmapBits填充的位图能显示吗?
背景画的什么东西,你贴代码
你是说你以前没用双缓冲时背景有画东西的,然后双缓冲就把它覆盖了? 这个是必然的,你必须把你以前画在pDC上的东西全部重新画到memDC的位图上才行
如果你的文档不涉及滚动,双缓冲方法和Dialog是一样的,3步走: 1.重写OnEraseBackground函数,禁止背景重画 BOOL OnEraseBanckground(){return FALSE;} 2.在OnDraw绘图前先创建离屏位图,对离屏位图清屏,然后画到View客户区 3.之后在离屏位图上绘制你自己的东西 代码如下: void OnDraw(CDC* pDC) { CRect rcClient; GetClientRect(rcClient); // 创建离屏位图 CBitmap offscreen; offscreen.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height()); CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&offscreen); // 清屏,清屏色为白色 memDC.FillSolidRect(rcClient, RGB(255, 255, 255)); /// 开始你的绘图代码,绘制的DC为离屏位图DC ////////////////////////// memDC.Rectangle... memDC.MoveTO... memDC.LineTo... /// 结束绘制 ////////////////////////////////////////////////////////////////////////////////////////// pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY); } 记得拦截消息 BEGIN_MESSAGE_MAP() ON_WM_ERASEBACKGROUND() END_MESSAGE_MAP)()
15,979
社区成员
115,897
社区内容
加载中
试试用AI创作助手写篇文章吧