填充背景的三种方法

来源:互联网 发布:连云港网络远程教育 编辑:程序博客网 时间:2024/04/29 11:30

IDB_BG 是位图资源的ID

方法一 OnEraseBkgnd(CDC* pDC)
{
    // 设置画刷为希望的背景
    CDC backBmp;
    backBmp.CreateCompatibleDC(pDC);
    CBitmap bitmap;
    bitmap.LoadBitmap(IDB_BG);
    CBrush m_brushBackground;
    m_brushBackground.CreatePatternBrush(&bitmap); ///创建位图画刷
    CBrush* pOldMemDCBrush = pDC->SelectObject(&m_brushBackground);
    pDC->PatBlt(0, 0, m_ScrollRect.Width(), m_ScrollRect.Height(), PATCOPY);
    pDC->SelectObject(pOldMemDCBrush);
    return TRUE;
}

方法二 OnEraseBkgnd(CDC* pDC)
{
    CBitmap m_pMap;
    m_pMap.LoadBitmap(IDB_BG);
    CRect rect;
    GetClientRect(&rect);
    BITMAP bm;
    CDC dcMem;
    m_pMap.GetObject(sizeof(BITMAP), &bm);
    dcMem.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dcMem.SelectObject(&m_pMap);
    for (register int nX = 0; nX < rect.right - rect.left; nX += bm.bmWidth)
        for (int nY = 0; nY < rect.bottom - rect.top; nY += bm.bmHeight)
            pDC->BitBlt(nX, nY, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY);
    dcMem.SelectObject(pOldBitmap);
    return TRUE;
}

方法三 OnEraseBkgnd(CDC* pDC)
{
    CBitmap bmp;
    bmp.LoadBitmap(IDB_BG); ///加载位图
    CBrush m_brushBackground;
    m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷
    CRect rect;
    GetClientRect(&rect);
    pDC->FillRect(rect, &m_brushBackground); //用背景画填充区域
    return TRUE;
}