LoadImage加载磁盘位图返回NULL,GetLastError返回0求排查
问题排查与解决
修正路径问题
你的sample.bmp与test.exe在同一目录下,使用绝对路径容易出现拼写错误或权限问题,直接改用相对路径即可:HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "sample.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);正确获取错误码
MessageBox会覆盖GetLastError()的返回值,必须在LoadImage调用后立即获取错误码才能得到真实结果:HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "sample.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); if (hBitmap == NULL) { DWORD errCode = GetLastError(); char errMsg[256]; sprintf(errMsg, "LoadImage失败,错误码:%lu", errCode); MessageBox(NULL, errMsg, "错误", MB_OK); return 0; }处理位图格式兼容问题
LoadImage默认不支持带Alpha通道的32位BMP,若你的sample.bmp是这类格式,需要添加LR_CREATEDIBSECTION标志:HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "sample.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);也可以用系统画图程序重新保存
sample.bmp为标准24位格式后再测试。修复静态控件显示问题
你创建的静态控件初始尺寸为(0,0),即使位图加载成功也无法显示。加载位图后可获取位图尺寸并调整控件大小:// 加载位图后添加以下代码 BITMAP bmpInfo; GetObject(hBitmap, sizeof(BITMAP), &bmpInfo); SetWindowPos(sampleImg, NULL, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SWP_NOZORDER);
内容的提问来源于stack exchange,提问作者Shrehan Raj Singh
相关产品推荐
相关产品推荐

