【发布时间】:2013-01-08 13:40:13
【问题描述】:
我是 Windows 编程的新手,一直在关注 Forger 的 Win32 API 编程教程。我一直在尝试在窗口内绘制图像。
查看了类似的问题,这段代码似乎对于加载位图是正确的:
HBITMAP testImage == NULL;
case WM_CREATE:
testImage = (HBITMAP)LoadImage(NULL, L"C:\\ScreenSnip.bmp", IMAGE_BITMAP, 498, 304, LR_LOADFROMFILE);
if(testImage == NULL) {
MessageBox(NULL, L"NO IMAGE LOADED!", L"Error!", MB_ICONEXCLAMATION | MB_OK);
}
break;
我在上面的位置有一个名为 ScreenSnip.bmp 的图像,它的尺寸是 498*304。但是,LoadImage 不起作用,并且 testImage 的值始终为 null。
我曾尝试使用 LoadBitmap() 将图像作为资源加载,这很有效,这就是我没有包含其余代码的原因。似乎是上面的 LoadImage() 导致了问题,但我不知道为什么。
有人有什么想法吗?我在 Windows 7 64 位上使用 VC++ 运行它。
【问题讨论】:
-
您是否尝试过将
cxDesired和cyDesired设置为零?文档中没有任何迹象表明这些“所需大小”参数允许用于图标或光标以外的任何内容。 -
如果函数失败,返回值为NULL。要获取扩展错误信息,请调用 GetLastError。
-
谢谢@chris - 我使用了GetLastError,它给我的值为0。我找到了this question,我认为那里的建议可能正是我想要的。感谢您的帮助!
-
LoadImage api只适用于未压缩的位图文件,请检查您要加载的位图文件是否未使用RLE编码压缩。
-
您是在 LoadImage 之后立即调用 GetLastError 还是先调用 MessageBox?
标签: c++ winapi visual-c++ bitmap loadimage