我正在编写一个函数,可以快速绘制正在制作的游戏的菜单图像。我可以很好地绘制背景和文本块,但是在屏幕上创建位图图像时遇到问题
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的代码吗?这是我的第一个问题
编辑**附加的'/'尚未解决问题。
编辑***使用GetLastError,我发现错误代码为2,ERROR_FILE_NOT_FOUND
您的问题的早期版本检查了的返回值,LoadImage
但仅此而已。该文件说:
如果函数失败,则返回值为
NULL
。要获取扩展的错误信息,请致电GetLastError
。
因此,如果函数失败,请调用GetLastError
以找出原因。这样做时,您将获得错误代码ERROR_FILE_NOT_FOUND
。这是非常确定的。您指定的文件名不存在。
请注意,问题的最新更新中的代码是GetLastError
无条件调用的。这是一个错误,在Stack Overflow上经常看到这样的错误。该文档仅告诉您GetLastError
在呼叫LoadImage
失败时呼叫。如果LoadImage
成功调用,则返回值byGetLastError
是没有意义的。Win32中的错误处理在很大程度上与其处理方式相同LoadImage
,但并非总是如此。因此,您必须非常仔细地阅读文档。
也许代替
C:\\Users\\Tim\documents\\...
你的意思是
C:\\Users\\Tim\\documents\\...
好的,现在您的路径正确了。要调用LoadImage
的回报NULL
,但GetLastError
不再是有益的和回报ERROR_SUCCESS
。本身就是怪异的。
我认为问题在于您的图片使用了LoadImage
无法理解的格式。我拿了您的.bmp文件,将其加载到Paint.net中,然后重新保存。完成该操作后,重新保存的图像将成功加载。
与其尝试从文件中加载它,不如将图像链接为资源并以这种方式加载它,将更加有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句