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

VS 設定視窗背景圖片:在 WM_ERASEBKGND 中繪製

     編輯:程式設計綜合問答

標準做法

在視窗類別中處理 WM_ERASEBKGND 訊息,於客戶區繪製位圖,並回傳 TRUE 表示已處理背景擦除,避免系統預設填充造成閃爍。

程式碼範例 (MFC)

BOOL CMyDialog::OnEraseBkgnd(CDC* pDC) {
    CRect rect;
    GetClientRect(&rect);
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap bmp;
    bmp.LoadBitmap(IDB_MY_BACKGROUND); // 資源 ID
    CBitmap* pOld = memDC.SelectObject(&bmp);
    pDC->StretchBlt(0, 0, rect.Width(), rect.Height(),
                    &memDC, 0, 0, bmpWidth, bmpHeight, SRCCOPY);
    memDC.SelectObject(pOld);
    return TRUE; // 關鍵:告知系統背景已繪製
}

關鍵點

  • 使用 StretchBlt 實現圖片隨視窗大小拉伸。
  • 若對話框含有子控制項,建議在 OnCtlColor 中設定透明背景(SetBkMode(TRANSPARENT)),避免控制項遮蓋圖片。
  • 高 DPI 情況下可考慮使用 CImage + Draw 配合 SetStretchBltMode(HALFTONE) 獲得更好品質。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved