位圖顯示三步驟
- 使用
LoadImage 載入位圖檔案至 CBitmap
- 建立記憶體 DC 並將位圖選入
- 以
BitBlt 將記憶體 DC 內容複製至目標 DC
關鍵 API:LoadImage
HANDLE LoadImage(
HINSTANCE hinst, // 資源模組句柄,檔案載入時為 NULL
LPCTSTR lpszName, // 檔案路徑或資源名稱
UINT uType, // IMAGE_BITMAP / IMAGE_CURSOR / IMAGE_ICON
int cxDesired, // 寬度(像素)
int cyDesired, // 高度
UINT fuLoad // LR_LOADFROMFILE 等載入旗標
);
完整範例程式碼
CClientDC dc(this); // 視窗客戶區 DC
CDC* pMemDC = new CDC;
pMemDC->CreateCompatibleDC(&dc); // 建立相容記憶體 DC
CBitmap bitmap;
bitmap.m_hObject = (HBITMAP)::LoadImage(nullptr, L"b1.bmp",
IMAGE_BITMAP, 500, 400, LR_LOADFROMFILE);
pMemDC->SelectObject(&bitmap); // 選入位圖
CRect rect;
GetClientRect(&rect);
dc.BitBlt(0, 0, rect.right, rect.bottom, pMemDC, 0, 0, SRCCOPY);
delete pMemDC; // 記得釋放記憶體 DC
注意事項
CDC 無複製建構子,不可直接賦值(mdc = dc 錯誤)
CBitmap::m_hObject 底層為 HBITMAP,需手動附加
- 記憶體 DC 需手動
delete,或改用棧上物件自動釋放