主题:如何提高绘图避免调整窗口大小时窗口内容闪烁
tr0217
[专家分:730] 发布于 2010-03-27 17:41:00
想编一个简单的显示文本文件的程序,显示的页面有点像word 2003,一页一页的显示,每页是一张A4纸的大小。
但是绘制白色页面时效率不高,调整窗口大小时页面闪烁。
请问有什么好办法。
回复列表 (共3个回复)
沙发
tr0217 [专家分:730] 发布于 2010-03-27 17:47:00
这个程序想用在系统维护盘或者其它光盘的自动运行时显示使用说明用的。虽然使用说明可以编译成chm。自己写个程序可以练习一下编程。
板凳
tr0217 [专家分:730] 发布于 2010-03-28 17:35:00
看来自己的问题还是自己解决算了
下面是双缓冲
BOOL CMainWindow::OnEraseBkgnd( CDC* pDC )
{
/*
CRect rect;
CBrush brush;
brush.CreateSolidBrush(RGB(144,153,174));
pDC->GetClipBox(rect);
pDC->FillRect(rect,&brush);*/
return FALSE;
}
void CMainWindow::OnPaint ()
{
CPaintDC dc (this);
CDC MemDC;
CBitmap bmpFace;
CRect ClientRect;
CRect PaperRect;
GetClientRect (&ClientRect);
int bmpWidth;
MemDC.CreateCompatibleDC(&dc);
if(ClientRect.right <= m_nViewWidth)
{
PaperRect.left = 70;
PaperRect.right = 70 + m_nPaperWidth;
bmpWidth = m_nViewWidth;
}
else
{
PaperRect.left = (ClientRect.right - m_nPaperWidth) / 2;
PaperRect.right = PaperRect.left + m_nPaperWidth;
bmpWidth = ClientRect.right;
}
PaperRect.top = 40;
PaperRect.bottom = 40 + m_nPaperHeight;
bmpFace.CreateCompatibleBitmap(&dc,bmpWidth,m_nViewHeight);
CBitmap *pOldBmp = NULL;
pOldBmp = MemDC.SelectObject(&bmpFace);
//CBrush b1;
//b1.CreateSolidBrush(RGB(0,0,0));
//dc.FillRect (&PaperRect, &b1);
MemDC.SelectStockObject (NULL_PEN);
MemDC.SelectStockObject (GRAY_BRUSH);
MemDC.Rectangle (&PaperRect);
//PaperRect.OffsetRect(-3,-3);
//CBrush b2;
//b2.CreateSolidBrush(RGB(255,255,255));
//dc.FillRect (&PaperRect, &b2);
MemDC.SelectStockObject (BLACK_PEN);
MemDC.SelectStockObject (WHITE_BRUSH);
MemDC.Rectangle (&PaperRect);
//
// Set the window origin to reflect the current scroll positions.
//
dc.SetWindowOrg (m_nHScrollPos, m_nVScrollPos);
dc.BitBlt(ClientRect.left,ClientRect.top,bmpWidth,m_nViewHeight,
&MemDC,ClientRect.left,ClientRect.top,SRCCOPY);
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();
}
3 楼
miaoyong [专家分:760] 发布于 2010-03-28 19:57:00
不错,不错,我也遇到类似的问题!不过我没你这么细心!用局部重绘函数处理的!
我来回复