📄 subject_26450.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>画完以后把它显示出来就搞定了 <BR><BR><BR>CRect rcFrame, rcFill;<BR> GetWindowRect(&rcFrame);<BR> <BR> CWindowDC dc(this);<BR> <BR> CDC memDC;<BR> memDC.CreateCompatibleDC((CDC *)&dc);<BR> <BR> CBitmap memBitmap;<BR> //memBitmap.CreateCompatibleBitmap(pDC, rect.right, rect.bottom);<BR> memBitmap.CreateCompatibleBitmap((CDC *)&dc, rcFrame.right, 43);<BR> <BR> CBitmap *pOldBitmap = memDC.SelectObject(&memBitmap);<BR> <BR> /////////////////////////////<BR> <BR> <BR> <BR> CPoint pt; <BR> <BR> CBrush brush,newBrush;<BR> CPen pen;<BR> brush.CreateSolidBrush(RGB(0,151,223));<BR> newBrush.CreateSolidBrush(RGB(176,216,239));<BR> pen.CreatePen(PS_SOLID,1,RGB(64,64,127)); <BR> <BR> int nHalfIcon = GetSystemMetrics(SM_CXICON) /2;<BR> <BR> <BR> CPen * OldPen = (CPen * )memDC.SelectObject(&pen);<BR> CBrush * OldBrush = (CBrush *)memDC.SelectObject(&brush);<BR> // if(!m_bDrawMenu)<BR> // {<BR> //画标题栏矩形框 <BR> pt.x = 8;<BR> pt.y = 10;<BR> rcFill.left = 3;<BR> rcFill.top = 3;<BR> rcFill.right = rcFrame.Width()-7-3*nHalfIcon;<BR> rcFill.bottom = 22;<BR> // memDC.FillSolidRect(&rcFill,RGB(0,151,223));<BR> memDC.FillSolidRect(&rcFill,RGB(223,239,239));<BR> memDC.Draw3dRect(rcFill,RGB(0,151,223),RGB(0,151,223));<BR> rcFill.right = rcFrame.Width()-4;<BR> memDC.Draw3dRect(rcFill,RGB(0,151,223),RGB(0,151,223));<BR> rcFill.left = 5;<BR> rcFill.top = 5;<BR> rcFill.right = rcFrame.Width()-9-3*nHalfIcon;<BR> rcFill.bottom = 20;<BR> memDC.Draw3dRect(rcFill,RGB(64,64,127),RGB(64,64,127));<BR> memDC.RoundRect(rcFill,pt);<BR> <BR> // Initializes a CFont object with the specified characteristics. <BR> CFont font;<BR> VERIFY(font.CreateFont(<BR> 13, // nHeight<BR> 0, // nWidth<BR> 0, // nEscapement<BR> 0, // nOrientation<BR> FW_MEDIUM, // nWeight<BR> FALSE, // bItalic<BR> FALSE, // bUnderline<BR> 0, // cStrikeOut<BR> ANSI_CHARSET, // nCharSet<BR> OUT_DEFAULT_PRECIS, // nOutPrecision<BR> CLIP_DEFAULT_PRECIS, // nClipPrecision<BR> DEFAULT_QUALITY, // nQuality<BR> DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily<BR> "宋体")); // lpszFacename<BR> <BR> // Do something with the font just created...<BR> CFont* def_font = memDC.SelectObject(&font);<BR> memDC.TextOut(100, 6, "安全文件系统管理员管理程序");<BR> <BR><BR><BR> dc.BitBlt(0, 0, rcFrame.right,43, &memDC, 0, 0, SRCCOPY);<BR> // if(!m_bDrawMenu)<BR> // { <BR> COLORREF clrCaption;<BR> clrCaption = GetSysColor(COLOR_ACTIVECAPTION);<BR> <BR> memDC.SelectObject(m_hSys); <BR> dc.BitBlt(4, 5, m_rectSys.Width(), m_rectSys.Height(), &memDC, 0, 0, SRCCOPY); <BR> <BR> memDC.SelectObject(m_hBmp); <BR> dc.BitBlt(20, 2, m_rectLogo.Width(), m_rectLogo.Height(), &memDC, 0, 0, SRCCOPY); <BR> <BR> // m_rectTitle.left = rcFrame.Width()-9-3*nHalfIcon;<BR> // m_rectTitle.right = rcFrame.Width()-9-3*nHalfIcon + bm.bmWidth;<BR> // m_rectTitle.top = 4 ; <BR> memDC.SelectObject(m_hTitle);<BR> <BR> dc.BitBlt(rcFrame.Width()-8-3*nHalfIcon, 5, m_rectTitle.Width(), m_rectTitle.Height(), &memDC, 0, 0, SRCCOPY); <BR> //rcFrame.Width()-4-3*nHalfIcon<BR> // }<BR> memDC.SelectObject(pOldBitmap);<BR> memDC.SelectObject(OldPen);<BR> 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> CDC MemDC;<BR> CClientDC dc(this);<BR> MemDC.CreateCompatibleDC((CDC *)&dc);<BR> CRect rect;<BR> GetWindowRect(&rect);<BR><BR><BR> CBitmap memBitmap;<BR> memBitmap.CreateCompatibleBitmap((CDC *)&dc, rect.right,rect.bottom);<BR><BR> CBitmap * pOldBitmap = MemDC.SelectObject(&memBitmap);<BR> //-----<BR> //draw the DrawObj(line, rect,circle,,,)here<BR> CTypedPtrList<CObList, CBresenhamXP *> & LineList = GetDocument()->m_pLineList;<BR> POSITION pos = LineList.GetHeadPosition();<BR> while(NULL != pos)<BR> {<BR> CBresenhamXP * pLine = LineList.GetNext(pos);<BR> pLine->DrawLine(&MemDC);<BR> }<BR> //---------------<BR><BR> //turn it to dc<BR> dc.BitBlt(0, 0, rect.right, rect.bottom, <BR> &MemDC, 0,0,SRCCOPY);<BR><BR> 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 + -