use*_*573 6 c++ null winapi bitmap 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;
}
Run Code Online (Sandbox Code Playgroud)
截至目前,箭头为 NULL,我收到加载图像失败文本框。我使用的是 arrow.bmp 的相对路径,我也尝试过使用完整路径,但也没有用。
你可能已经注意到这个函数在 WndProc 之外。其他一切都画得很好。我也尝试在那里运行它,但箭头.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成功,则返回值GetLastError是没有意义的。Win32 中的错误处理主要以与LoadImage它相同的方式处理,但并非总是如此。所以你必须非常仔细地阅读文档。
也许而不是
C:\\Users\\Tim\documents\\...
Run Code Online (Sandbox Code Playgroud)
你的意思是
C:\\Users\\Tim\\documents\\...
Run Code Online (Sandbox Code Playgroud)
好的,现在你找到了正确的路径。对LoadImage返回的调用NULL,但GetLastError不再有用并返回ERROR_SUCCESS。这本身就很奇怪。
我认为问题在于您的图像使用了LoadImage无法理解的格式。我拿了你的 .bmp 文件,将它加载到 Paint.net 中,然后重新保存它。一旦我这样做了,重新保存的图像就成功加载了。
与其尝试从文件中加载它,不如将图像链接为资源并以这种方式加载它会更有意义。
| 归档时间: |
|
| 查看次数: |
8638 次 |
| 最近记录: |