我正在寫一個函數,可以快速繪製我正在製作的遊戲的菜單圖像。我能夠繪製背景和文本塊就好了,但我無法在屏幕Win32應用程序。 HBITMAP LoadImage無法加載任何內容
bool menu::drawMenu(PAINTSTRUCT ps)
{
HWND hWnd = GetActiveWindow();
HDC hdc = GetDC(hWnd), hdcMem;
//Draw a new background
HPEN blackPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
HBRUSH blackBrush = CreateSolidBrush(RGB(0, 0, 0));
SelectObject(hdc, blackPen);
SelectObject(hdc, blackBrush);
Rectangle(hdc, 0, 0, 1080, 720);
//insert selection text
TextOut(hdc, 30, 0, L"New Game", 8);
TextOut(hdc, 30, 30, L"Exit Game", 9);
//draw arrow sprite
HBITMAP arrow = (HBITMAP)LoadImage(NULL, L"C:\\Users\\Tim\documents\\visual studio 2013\\Projects\\BoulderBisque\\BoulderBisque\\arrow.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
DWORD lastError = GetLastError();
if (arrow == NULL)
{
TextOut(hdc, 0, 60, L"Image Load Failed", 17);
return false;
}
hdcMem = CreateCompatibleDC(hdc);
if (hdcMem == NULL)
{
TextOut(hdc, 0, 90, L"Memory Creation Failed", 22);
return false;
}
SelectObject(hdcMem, arrow);
BitBlt(hdc, 0, choice * 30, 16, 16, hdcMem, 0, 0, SRCCOPY);
//cleanup
ReleaseDC(hWnd, hdc);
DeleteDC(hdcMem);
return true;
}
截至目前箭頭是NULL創建位圖圖像,我得到了加載圖像失敗文本框。 我正在使用arrow.bmp的相對路徑,我也嘗試使用完整路徑,但也沒有工作。
你可能已經注意到這個函數在WndProc之外。其他一切都很好。 我試着在那裏運行它,但是arrow.bmp加載。
我做錯了什麼導致arrow.bmp爲NULL?我有其他方法我打算以類似的方式運行,所以讓這個函數運行真的是一個很大的幫助。
編輯*每當我給完整的路徑名稱它仍然無法加載。 也是這不是適當的代碼爲SO?這是我的第一個問題...
編輯** aditional'/'s沒有解決這個問題。
編輯***使用GetLastError函數,我發現錯誤代碼爲2,ERROR_FILE_NOT_FOUND
始終使用文件的完整路徑。始終在SO問題中發佈正確的代碼。 –
'GetActiveWindow'調用也似乎有點可疑。 –
應該是「L」C:\\ Users \\ Tim \\ Documents \\ visual studio 2013 \\ Projects \\ BoulderBisque \\ BoulderBisque \\ arrow.bmp「'帶有更多'\\'東西。 –