首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC6 MFC 對話框背景圖片拉伸:在 OnEraseBkgnd 中用 StretchBlt 繪製,自適應對話框尺寸變化

     編輯:程式設計綜合問答

位圖資源 ID `IDB_BG`,對話框類 `CMyDlg`。

步驟

  1. 資源視圖導入位圖,設置 ID `IDB_BG`。
  2. 類向導添加 `OnEraseBkgnd` 處理器。
  3. 代碼:
BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) {
    CRect rect;
    GetClientRect(&rect);
    
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap bmp;
    bmp.LoadBitmap(IDB_BG);
    CBitmap* pOld = memDC.SelectObject(&bmp);
    
    BITMAP bm;
    bmp.GetBitmap(&bm);
    
    // 拉伸繪製
    pDC->SetStretchBltMode(HALFTONE);
    pDC->StretchBlt(0, 0, rect.Width(), rect.Height(),
                    &memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
    
    memDC.SelectObject(pOld);
    return TRUE; // 阻止默認擦除
}

關鍵點

  • `SetStretchBltMode(HALFTONE)` 提升拉伸質量(需 `SetBrushOrgEx` 配合)。
  • 返回 `TRUE` 告訴系統已處理背景擦除,避免閃爍。
  • 若對話框可調整大小,`OnSize` 中 `Invalidate()` 觸發重繪。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved