当我单独运行mfc程序时,我遇到了一个问题,表达式:mhbitmap=0
当我单独运行mfc程序时,我遇到了一个问题,表达式:mhbitmap=0,mfc,Mfc,这是两个错误的组合: 使用相对路径(总是错误的)引用文件系统对象,以及 未能检查错误(同样,错误总是) 具体地说,img.Load(strBmpPath)无法加载指定为相对路径的图像。这在调试器下运行时可能会成功,因为IDE会帮助调整当前工作目录,以便将相对路径解析为文件系统对象 当您在IDE之外启动应用程序时,通常不会发生这种情况。此时,当前工作目录不再受您的控制,图像文件也不在代码要查找的位置 在img没有保存有效映像的情况下,调用img.Detach()会使调试断言失败,可能类似于atls
这是两个错误的组合:
img.Load(strBmpPath)
无法加载指定为相对路径的图像。这在调试器下运行时可能会成功,因为IDE会帮助调整当前工作目录,以便将相对路径解析为文件系统对象
当您在IDE之外启动应用程序时,通常不会发生这种情况。此时,当前工作目录不再受您的控制,图像文件也不在代码要查找的位置
在img
没有保存有效映像的情况下,调用img.Detach()
会使调试断言失败,可能类似于atlstake(m_hBitmap!=NULL)
即时修复方法是在加载图像时检查错误。另一种选择是构造到图像资源的完全限定路径
不过,您可能打算将“\res\bgimg.png”作为二进制资源编译到可执行映像中,然后使用加载它。img.load(strbmpath)
返回错误/成功代码。程序不会检查是否成功,当它无法加载映像时,img.Detach()
将使调试断言失败。没有可分离的HBITMAP
存储文件。可能文件“\\res\\bgimg.png”
不存在。
CString strBmpPath = _T(".\\res\\bgimg.png");
CImage img;
img.Load(strBmpPath);
MoveWindow(0, 0, img.GetWidth(), img.GetHeight());
CBitmap bmpTmp;
bmpTmp.Attach(img.Detach());
m_bkBrush.CreatePatternBrush(&bmpTmp);
CDialogEx::OnInitDialog();