⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_62632.htm

📁 vc
💻 HTM
字号:
<p>
序号:62632 发表者:蓝白725 发表日期:2003-11-27 20:10:32
<br>主题:请教如何利用双缓冲绘制背景图形?
<br>内容:我想利用双缓冲在子窗口中绘制一幅背景图形,拖动滚动条时尽量不闪<BR>在OnDraw()用下面的代码试了一下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect Rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;Rect);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC MemDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.CreateCompatibleDC(pDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.SetMapMode(MM_ISOTROPIC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.SetWindowExt(CSize(600,300));<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.SetViewportExt(CSize(Rect.right,Rect.bottom));<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap MemBitmap;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap *pOldBitmap = MemDC.SelectObject(&amp;MemBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;DPtoLP(&amp;Rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPoint TopLeft=Rect.TopLeft();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.FillSolidRect(0,0,Rect.right,Rect.bottom,RGB(255,255,255));<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.MoveTo(100,100);MemDC.LineTo(500,500);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.MoveTo(100,100);MemDC.LineTo(500,100);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;BitBlt(TopLeft.x,TopLeft.y,Rect.right,Rect.bottom,&amp;MemDC,0,0,SRCCOPY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.SelectObject(pOldBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemBitmap.DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;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-&gt;SetMapMode(MM_ISOTROPIC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetWindowExt(1000,1000);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetViewportExt(Rect.right,Rect.bottom);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetViewportOrg(Rect.right/2,Rect.bottom/2);<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;FillSolidRect(0,0,Rect.right,Rect.bottom,RGB(255,255,255));<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;Ellipse(CRect(-500,-500,500,500));<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(100,100);pDC-&gt;LineTo(500,500);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(100,100);pDC-&gt;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-&gt;BitBlt(xx,xx,xxx,xxx,&amp;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 + -