在視窗類別中處理 WM_ERASEBKGND 訊息,於客戶區繪製位圖,並回傳 TRUE 表示已處理背景擦除,避免系統預設填充造成閃爍。
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)),避免控制項遮蓋圖片。CImage + Draw 配合 SetStretchBltMode(HALFTONE) 獲得更好品質。