2015-06-19 75 views
-1

我有一個窗口使用Win32和消息處理程序我有一個WM_PAINT的情況,以便在窗口中繪製位圖。然而,在運行位圖不繪製,有什麼我失蹤?我需要手動發送WM_PAINT消息嗎?位圖不在Win32中繪製C++

這裏是我的代碼:http://pastebin.com/bi48LB0U

,這是WM_PAINT情況:

case WM_PAINT: 
    hDC = BeginPaint(hwnd, &ps); 
    bmp = LoadBitmap(hInst, L"C:\\example.bmp"); 
    memDCExercising = CreateCompatibleDC(hDC); 
    SelectObject(memDCExercising, bmp); 
    BitBlt(hDC, 100, 100, 500, 500, memDCExercising, 0, 0, SRCCOPY); 
    DeleteDC(memDCExercising); 
    DeleteObject(bmp); 
    EndPaint(hwnd, &ps); 
    break; 
+1

'assert(bmp!= NULL);' –

+2

註定失敗,LoadBitmap()接受資源ID,而不是路徑名。你需要LoadImage()。是的,總是檢查winapi返回值,斷言()至少。 –

+0

如何從我的文件名中創建資源ID? – Pottsiex5

回答

1

你的位圖沒有顯示,因爲您的來電LoadBitmap返回NULL,由於無效lpBitmapName參數。從爲LoadBitmap的文檔:

lpBitmapName [IN]:一個指針,指向包含要加載位圖資源的名的空終止字符串。或者,此參數可包含資源標識符中的低位字和零位中的高位字。可以使用MAKEINTRESOURCE宏創建此值。

換句話說:LoadBitmap只能從RT_BITMAP類型(或由系統提供的預定義的位圖)的Resources加載位圖。如果您需要從磁盤加載位圖,請改爲使用LoadImage

如果您需要加載純文件位圖文件以外的圖像數據,請考慮使用Windows Imaging Component