我有一個遊戲我工作的一個功能:C++圖形與BitBlt函數
void DrawMap()
{
BITMAP bm;
PAINTSTRUCT ps;
HBITMAP sprites = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_COLOR_SPRITES));
HDC hdc = BeginPaint(hWnd, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, sprites);
GetObject(sprites, sizeof(bm), &bm);
// Find x and y coordinate for the top left of the visible screen
int x = 4, y = 4, ypos = 0;
// Draw lower layer
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos), ypos, SRCCOPY);
// Draw upper layer
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
if (game.Layer_One[x + i][y + j] != 0)
BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos, true), ypos, SRCCOPY);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hWnd, &ps);
}
變量「遊戲」是一個類的實例,我提出來存儲所有的遊戲VAR和funcs中。基本上,這兩個分組循環應該做的是創建一個雙層,9×9的32×32像素的網格,這是從一個地方的所有瓷磚的圖像複製。我測試了我的get_pos()函數,並且它返回完整精靈位圖中部分位圖的正確x和y位置。
get_pos的第二個參數()是通過參考 - 因此它可以給一個Y值這種方式,並返回一個x值。 出於某種原因,我的功能,雖然看起來正確地設置給我(並且明確地稱爲),但不會在hWnd上產生任何圖形。我做錯了什麼?
另外,是行:?? GetObject的(精靈,的sizeof(BM),&bm); 必要 –
是否顯示位圖,如果你直接選擇位圖到窗口DC如果是這樣,它仍然顯示,如果你選擇它到內存DC和BitBlt的這一切到窗口DC? – chris
是'DrawMap()'從'WM_PAINT'處理函數調用,或其他時刻窗口的至少部分已經失效?否則,設備上下文建通過'調用BeginPaint()'將其裁剪區域設置爲整個窗口,並借鑑它不會有任何效果。 –