回 帖 发 新 帖 刷新版面

主题:如何提高绘图避免调整窗口大小时窗口内容闪烁

想编一个简单的显示文本文件的程序,显示的页面有点像word 2003,一页一页的显示,每页是一张A4纸的大小。
但是绘制白色页面时效率不高,调整窗口大小时页面闪烁。
请问有什么好办法。

回复列表 (共3个回复)

沙发

这个程序想用在系统维护盘或者其它光盘的自动运行时显示使用说明用的。虽然使用说明可以编译成chm。自己写个程序可以练习一下编程。

板凳

看来自己的问题还是自己解决算了
下面是双缓冲

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 楼

不错,不错,我也遇到类似的问题!不过我没你这么细心!用局部重绘函数处理的!

我来回复

您尚未登录,请登录后再回复。点此登录或注册