📄 subject_62632.htm
字号:
<p>
序号:62632 发表者:蓝白725 发表日期:2003-11-27 20:10:32
<br>主题:请教如何利用双缓冲绘制背景图形?
<br>内容:我想利用双缓冲在子窗口中绘制一幅背景图形,拖动滚动条时尽量不闪<BR>在OnDraw()用下面的代码试了一下:<BR> CRect Rect;<BR> GetClientRect(&Rect);<BR><BR> CDC MemDC;<BR> MemDC.CreateCompatibleDC(pDC);<BR> MemDC.SetMapMode(MM_ISOTROPIC);<BR> MemDC.SetWindowExt(CSize(600,300));<BR> MemDC.SetViewportExt(CSize(Rect.right,Rect.bottom));<BR> <BR> CBitmap MemBitmap;<BR> MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);<BR> CBitmap *pOldBitmap = MemDC.SelectObject(&MemBitmap);<BR> <BR> pDC->DPtoLP(&Rect);<BR> CPoint TopLeft=Rect.TopLeft();<BR> <BR> MemDC.FillSolidRect(0,0,Rect.right,Rect.bottom,RGB(255,255,255));<BR> MemDC.MoveTo(100,100);MemDC.LineTo(500,500);<BR> MemDC.MoveTo(100,100);MemDC.LineTo(500,100);<BR><BR> pDC->BitBlt(TopLeft.x,TopLeft.y,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);<BR> MemDC.SelectObject(pOldBitmap);<BR> MemBitmap.DeleteObject();<BR> MemDC.DeleteDC();<BR>不知为何没有达到意想中的效果,闪烁问题没有解决,而且映射模式完全没起作用:(<BR>请各位高手帮忙诊断一下!非常感谢!!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:蓝白725 回复日期:2003-11-27 21:12:35
<br>内容:实在是想不出来双缓冲绘图中如何使用映射模式:(<BR>请各位帮帮忙啊!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hurtmanzc 回复日期:2003-11-28 10:28:25
<br>内容:你不要在内存DC中画线,你可以先用双缓冲的方法画出背景图,然后再用下面的方法画线。关于用双缓冲画背景图VC知识库中有一个Tree控件的例子,你在文档中心找找把。<BR>pDC->SetMapMode(MM_ISOTROPIC);<BR> pDC->SetWindowExt(1000,1000);<BR> pDC->SetViewportExt(Rect.right,Rect.bottom);<BR> pDC->SetViewportOrg(Rect.right/2,Rect.bottom/2);<BR> <BR> pDC->FillSolidRect(0,0,Rect.right,Rect.bottom,RGB(255,255,255));<BR> pDC->Ellipse(CRect(-500,-500,500,500));<BR> pDC->MoveTo(100,100);pDC->LineTo(500,500);<BR> pDC->MoveTo(100,100);pDC->LineTo(500,100);<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:打杂 回复日期:2003-11-28 10:54:33
<br>内容:试试把CDC MemDC\CBitmap MemBitmap,*pOldBitmap等放在类中,然后在构造函数初始化..<BR><BR>绘图操作用这个MemDC在一个函数绘完输出到屏幕,然后在OnDraw()只用两句代码:<BR>if(BOOL) //判断是否绘了的BOOL变量<BR> pDC->BitBlt(xx,xx,xxx,xxx,&MemDC,0,0,SRCCOPY);<BR>应该能解决闪烁..<BR><BR>记得在析构函数Del那些DD...<BR>2003-11-28 10:57:50
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -