【发布时间】:2019-11-07 05:31:53
【问题描述】:
我是win32的新手。我将位图图像“logo2.bmp”放入 .vcxproj 所在的目录中。但是,当我使用 LoadImage() 函数时,似乎没有加载任何内容。
我在网上查了我的问题,但是修改后图片仍然无法加载。
void AddControls(HWND hwnd)
{
//some code
hLogo = CreateWindowW(L"Static", NULL, WS_VISIBLE | WS_CHILD | SS_BITMAP,
350, 60, 100, 100, hwnd, NULL, NULL, NULL);
if (hLogoImage != NULL)
{
SendMessage(hLogo, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hLogoImage);
}
else
{
MessageBox(0, L"Could not load image", L"Error", MB_OK);
}
}
void loadImages()
{
hLogoImage = (HBITMAP)LoadImage(NULL, L"logo2.bmp", IMAGE_BITMAP,
0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE);
}
我希望输出是在 windows 上成功显示的位图图像,但是显示了“错误”文本框并且没有显示图片。
【问题讨论】:
-
当
LoadImage返回NULL,GetLastError返回什么。如果是“找不到文件”,当前目录是什么? logo2.bmp 是否存在于该目录中? -
请阅读您的第二句话。您是否从 Visual Studio 运行此代码?如果是这样,我认为当前目录是包含 .exe 的目录。
-
这里提出的大多数关于 winapi 的问题都包含不包括错误检查的代码。不管您的代码实际上有什么问题,对您来说最大的教训是,您必须学会在使用 Windows API 时检查错误。
-
没有任何理由永远在代码中使用相对路径名。 总是构造一个完全限定的路径名,如果你不希望你的代码在你无法控制的环境下改变它的含义。
-
我并不是建议您使用 absolute 路径。我建议您构建一个完全限定路径。该路径可以相对于已知位置构建(如可执行映像的路径,可通过GetModuleFileName 获得)。你得到的警告很清楚:至少有一条路径通过你的窗口过程,它不返回值。修复它。
标签: c++ visual-studio winapi loadimage hbitmap