当我单独运行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();