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

📄 subject_26450.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:26450 发表者:yewei 发表日期:2003-01-01 12:41:16
<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-01-01 13:50:51
<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>回复者:高扬 回复日期:2003-01-02 13:10:15
<br>内容: 当然可以做到咯!<BR>参考代码如下:将所有的画图,都放到一个BITMAP中,这个BITMAP是存放在内存中的<BR>画完以后把它显示出来就搞定了&nbsp;&nbsp; <BR><BR><BR>CRect rcFrame, rcFill;<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(&amp;rcFrame);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CWindowDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC memDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.CreateCompatibleDC((CDC *)&amp;dc);<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;memBitmap.CreateCompatibleBitmap((CDC *)&amp;dc, rcFrame.right, 43);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap *pOldBitmap = memDC.SelectObject(&amp;memBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPoint pt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBrush brush,newBrush;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen pen;<BR>&nbsp;&nbsp;&nbsp;&nbsp;brush.CreateSolidBrush(RGB(0,151,223));<BR>&nbsp;&nbsp;&nbsp;&nbsp;newBrush.CreateSolidBrush(RGB(176,216,239));<BR>&nbsp;&nbsp;&nbsp;&nbsp;pen.CreatePen(PS_SOLID,1,RGB(64,64,127)); <BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nHalfIcon = GetSystemMetrics(SM_CXICON) /2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen * OldPen = (CPen * )memDC.SelectObject(&amp;pen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBrush *&nbsp;&nbsp;OldBrush = (CBrush *)memDC.SelectObject(&amp;brush);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;if(!m_bDrawMenu)<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//画标题栏矩形框&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pt.x = 8;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pt.y = 10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.left = 3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.top = 3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.right = rcFrame.Width()-7-3*nHalfIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.bottom = 22;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;memDC.FillSolidRect(&amp;rcFill,RGB(0,151,223));<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.FillSolidRect(&amp;rcFill,RGB(223,239,239));<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.Draw3dRect(rcFill,RGB(0,151,223),RGB(0,151,223));<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.right = rcFrame.Width()-4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.Draw3dRect(rcFill,RGB(0,151,223),RGB(0,151,223));<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.left = 5;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.top = 5;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.right = rcFrame.Width()-9-3*nHalfIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rcFill.bottom = 20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.Draw3dRect(rcFill,RGB(64,64,127),RGB(64,64,127));<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.RoundRect(rcFill,pt);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Initializes a CFont object with the specified characteristics. <BR>&nbsp;&nbsp;&nbsp;&nbsp;CFont font;<BR>&nbsp;&nbsp;&nbsp;&nbsp;VERIFY(font.CreateFont(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// nHeight<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nWidth<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nEscapement<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nOrientation<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FW_MEDIUM,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nWeight<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // bItalic<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // bUnderline<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // cStrikeOut<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANSI_CHARSET,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// nCharSet<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT_DEFAULT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// nOutPrecision<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIP_DEFAULT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nClipPrecision<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_QUALITY,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nQuality<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_PITCH | FF_SWISS,&nbsp;&nbsp;// nPitchAndFamily<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"宋体"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // lpszFacename<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Do something with the font just created...<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFont* def_font = memDC.SelectObject(&amp;font);<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.TextOut(100, 6, "安全文件系统管理员管理程序");<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(0, 0, rcFrame.right,43, &amp;memDC, 0, 0, SRCCOPY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;if(!m_bDrawMenu)<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;COLORREF clrCaption;<BR>&nbsp;&nbsp;&nbsp;&nbsp;clrCaption = GetSysColor(COLOR_ACTIVECAPTION);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(m_hSys);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(4, 5, m_rectSys.Width(), m_rectSys.Height(), &amp;memDC, 0, 0, SRCCOPY);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(m_hBmp);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(20, 2, m_rectLogo.Width(), m_rectLogo.Height(), &amp;memDC, 0, 0, SRCCOPY);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp; m_rectTitle.left = rcFrame.Width()-9-3*nHalfIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;m_rectTitle.right = rcFrame.Width()-9-3*nHalfIcon + bm.bmWidth;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;m_rectTitle.top = 4 ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(m_hTitle);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(rcFrame.Width()-8-3*nHalfIcon, 5, m_rectTitle.Width(), m_rectTitle.Height(), &amp;memDC, 0, 0, SRCCOPY);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//rcFrame.Width()-4-3*nHalfIcon<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(pOldBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(OldPen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(OldBrush);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:yewei 回复日期:2003-01-02 20:48:39
<br>内容:Thank you,material_wing!With your help, I finished it.<BR>My code is:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;&nbsp;MemDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.CreateCompatibleDC((CDC *)&amp;dc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(&amp;rect);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;&nbsp;memBitmap;<BR>&nbsp;&nbsp;&nbsp;&nbsp;memBitmap.CreateCompatibleBitmap((CDC *)&amp;dc, rect.right,rect.bottom);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap * pOldBitmap = MemDC.SelectObject(&amp;memBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//-----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //draw the DrawObj(line, rect,circle,,,)here<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTypedPtrList&lt;CObList, CBresenhamXP *&gt; &amp; LineList = GetDocument()-&gt;m_pLineList;<BR>&nbsp;&nbsp;&nbsp;&nbsp;POSITION pos = LineList.GetHeadPosition();<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(NULL != pos)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBresenhamXP * pLine = LineList.GetNext(pos);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine-&gt;DrawLine(&amp;MemDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//---------------<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //turn it to dc<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(0, 0, rect.right, rect.bottom, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;MemDC, 0,0,SRCCOPY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;MemDC.SelectObject(pOldBitmap);<BR><BR>但是还有一个问题,当复制BITMA到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>
回复者:高扬 回复日期:2003-01-03 09:09:18
<br>内容:恩,那是WINDOWS默认的风格,如果你不改变你在内存中生成的那块bitmap的颜色的话!我也碰到过,解决的办法就是把那块你在内存中create的bitmap都填充满,问题就不会再有了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:yewei 回复日期:2003-01-08 22:20:43
<br>内容:Yeah,every is ok,thank you material_wing<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 + -