📄 subject_47946.htm
字号:
<p>
序号:47946 发表者:huza 发表日期:2003-07-26 13:57:33
<br>主题:View中双缓冲问题,高分求教
<br>内容:小弟在View中设了个定时<BR>器,总是画圆,有时候感觉有点闪<BR>哪位高手能具体讲一下应该怎么办办。<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>
回复者:凯凯 回复日期:2003-07-26 14:25:46
<br>内容:就是搞一个内存DC,在上面画图,画完后一次性BITBLT到屏幕DC上。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:helptohelp 回复日期:2003-07-27 10:27:44
<br>内容:我也遇到了这个问题。<BR>凯凯,我想问你在内存画图时是在OnDraw()里画,还是自己定义一个函数呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:huza 回复日期:2003-07-27 15:01:51
<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>
回复者:huza 回复日期:2003-07-27 15:35:04
<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-07-28 03:57:28
<br>内容:....英文xp,中文粘过来就成这样了,将就看一下吧?<BR><BR>ps:怎么解决这样的毛病?<BR><BR><BR><BR>void CPaintView::OnDraw(CDC* pDC)<BR>{<BR> CPaintDoc* pDoc = GetDocument(); <BR> ASSERT_VALID(pDoc); <BR> CTypedPtrList<CObList,CObject*>& itemList = pDoc->m_itemList; <BR> CDC dc; <BR> CBitmap bitmap; <BR> <BR> CBitmap* pOldBitmap; <BR> CRect client; <BR> CRect rect; <BR> pDC->GetClipBox(client);//&frac14;ì&Egrave;&iexcl;&Icirc;&THORN;&ETH;§&Ccedil;&oslash; <BR> GetClientRect(rect);//&frac14;ì&Egrave;&iexcl;&Otilde;&ucirc;&cedil;&ouml;&iquest;&Iacute;&raquo;§&Ccedil;&oslash; <BR> if(dc.CreateCompatibleDC(pDC))//&acute;&acute;&frac12;¨&Ograve;&raquo;&cedil;&ouml;&Oacute;&euml;pDC&frac14;&aelig;&Egrave;&Yacute;&micro;&Auml;&Auml;&Uacute;&acute;&aelig;&Eacute;è±&cedil;&raquo;·&frac34;&sup3; <BR> { <BR> if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(), <BR> rect.Height()))//&acute;&acute;&frac12;¨&Ograve;&raquo;&Oacute;&euml;pDC&frac14;&aelig;&Egrave;&Yacute;&micro;&Auml;&Icirc;&raquo;&Iacute;&frac14;&pound;&not;&acute;ó&ETH;&iexcl;&Icirc;&ordf;&Otilde;&ucirc;&cedil;&ouml;&iquest;&Iacute;&raquo;§&Ccedil;&oslash; <BR> { <BR> OnPrepareDC(&dc,NULL);//&Ecirc;&sup1;dc&Oacute;&euml;pDC&frac34;&szlig;&Oacute;&ETH;&Iacute;&not;&Ntilde;ù&micro;&Auml;&Oacute;&sup3;&Eacute;&auml;&sup1;&Oslash;&Iuml;&micro; <BR> pOldBitmap=dc.SelectObject(&bitmap);//&frac12;&laquo;&Icirc;&raquo;&Iacute;&frac14;&Ntilde;&iexcl;&Egrave;&euml;&Auml;&Uacute;&acute;&aelig;&raquo;·&frac34;&sup3; <BR> dc.SelectClipRgn(NULL);//&Ecirc;&sup1;dc&micro;&Auml;&Otilde;&ucirc;&cedil;&ouml;&iquest;&Iacute;&raquo;§&Ccedil;&oslash;&para;&frac14;&sup3;&Eacute;&Icirc;&THORN;&ETH;§&Ccedil;&oslash; <BR> dc.IntersectClipRect(client);//&Ocirc;&Ugrave;&iexcl;°&Oacute;&euml;&Eacute;&Iuml;&iexcl;±&frac14;ì&Egrave;&iexcl;&micro;&Auml;&Icirc;&THORN;&ETH;§&Ccedil;&oslash;&pound;&not;&Ecirc;&sup1; <BR> //&Auml;&Uacute;&acute;&aelig;&raquo;·&frac34;&sup3;&Oacute;&euml;pDC&frac14;ì&Egrave;&iexcl;&micro;&Auml;&Icirc;&THORN;&ETH;§&Ccedil;&oslash;&Iuml;à&micro;&Egrave; <BR> } <BR> } <BR> CBrush brush; <BR> if(!brush.CreateSolidBrush(RGB(255,255,255))) <BR> return ;<BR>// brush.UnrealizeObject(); <BR> dc.FillRect(client,&brush);//&frac12;&laquo;dc&micro;&Auml;×÷&Iacute;&frac14;&Ccedil;&oslash;&Euml;&cent;&ETH;&Acirc;&sup3;&Eacute;±&sup3;&frac34;°&Eacute;&laquo; <BR> <BR> if(itemList.GetCount()!=0) <BR> Draw(&dc);//&frac12;&laquo;&Euml;ù&Oacute;&ETH;&micro;&Auml;&raquo;&shy;&Iacute;&frac14;&para;&Ocirc;&Iuml;ó&Ocirc;&Uacute;&Auml;&Uacute;&acute;&aelig;&sup2;&Atilde;&frac14;&otilde;&Ccedil;&oslash;&Auml;&Uacute;&Ouml;&Oslash;&raquo;&shy; <BR> <BR> <BR> pDC->BitBlt(client.left,client.top,client.Width(),client.Height(), <BR> &dc,client.left,client.top,SRCCOPY);//&frac12;&laquo;&Auml;&Uacute;&acute;&aelig;&sup2;&Atilde;&frac14;&otilde;&Ccedil;&oslash;&micro;&Auml;&Icirc;&raquo;&Iacute;&frac14; <BR> //&iquest;&frac12;±&acute;&micro;&frac12;&acute;°&iquest;&Uacute;&sup2;&Atilde;&frac14;&otilde;&Ccedil;&oslash; <BR> dc.SelectObject(pOldBitmap); <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>
回复者:huza 回复日期:2003-07-28 10:29:49
<br>内容:偶写了一个关于双缓冲的程序,可是屏幕显示空白<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>
<font color=red>答案被接受</font><br>回复者:eric 回复日期:2003-07-28 10:55:46
<br>内容:CDC MemDC; //首先定义一个显示设备对象<BR>CBitmap MemBitmap;//定义一个位图对象<BR><BR>//随后建立与屏幕显示兼容的内存显示设备<BR>MemDC.CreateCompatibleDC(NULL);<BR>//这时还不能绘图,因为没有地方画 ^_^<BR>//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小<BR>MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);<BR><BR>//将位图选入到内存显示设备中<BR>//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上<BR>CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);<BR><BR>//先用背景色将位图清除干净,这里我用的是白色作为背景<BR>//你也可以用自己应该用的颜色<BR>MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));<BR><BR>//绘图<BR>MemDC.MoveTo(……);<BR>MemDC.LineTo(……);<BR><BR>//将内存中的图拷贝到屏幕上进行显示<BR>pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);<BR><BR>//绘图完成后的清理<BR>MemBitmap.DeleteObject();<BR>MemDC.DeleteDC();<BR><BR>禁止系统擦掉原来的图象<BR>可以重载OnEraseBkgnd()函数,让其直接返回TRUE就可以了。如<BR>BOOL CMyWin::OnEraseBkgnd(CDC* pDC) <BR>{<BR> return TRUE;<BR> //return CWnd::OnEraseBkgnd(pDC);//把系统原来的这条语句注释掉。<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>
回复者:huza 回复日期:2003-07-28 11:38:35
<br>内容:谢谢大家了,偶以前做的都是基于对话框的<BR>现在想弄一个演示实验,所以开始用SDI,结果遇到<BR>好多问题,多亏大家热心帮忙了,偶也要用偶知道的知识<BR>尽量多帮助大家才行。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -