【问题标题】:Debug assertion in MFC in VS2012VS2012 中 MFC 中的调试断言
【发布时间】:2012-12-28 22:49:29
【问题描述】:

我正在将旧版 GUI 应用程序迁移到 VS2012。在调试模式下运行此应用程序时,当我尝试使用以下代码行实例化工具栏时,会收到调试断言:

if(!m_wndMain.Create(this) || !m_wndMain.LoadToolBar(IDR_MAIN))

在MFC代码中翻了一圈,发现bartool.cpp中的下面这行在MSVC10->11中发生了变化:

if (lpBitmap == NULL)

到:

if ((lpBitmap == NULL) || (lpBitmap->biBitCount > 8))

在 AfxLoadSysColorBitmap 中。 在我的情况下,lpBitmap->biBitCount = 24 导致AfxLoadSysColorBitmap 返回NULL,这反过来又导致调试断言。 关于如何纠正我的程序行为以避免此调试断言的任何想法?

【问题讨论】:

  • Here's 某人描述了似乎相关的问题。阅读页面底部 Cezary H. Noweta 的答案,也许会对您有所帮助。
  • @Cezary:问题似乎确实相关。但是,对 LoadBitmap 的调用是在 CToolBar::LoadToolBar 的 bartool.cpp 中完成的,所以我无法使用 CBitmap 的变体...

标签: c++ mfc visual-studio-2012


【解决方案1】:

除了将位图更改为 8 位(256 色)之外,您最好的选择是使用 CMFCToolBar。这支持更高位深度的位图(包括 24 位和 32 位)位图。

【讨论】:

  • 谢谢。缩小图像就像一种魅力。然而,这引出了一个问题:这在 VS2010 中是如何工作的?不仅工具栏加载在那里,而且图像也是可见的。我能看到的唯一解释是 MFC 将图像缩小到 8 位...
【解决方案2】:

请检查您使用的位图图像确实只有 8 位。 我认为您使用的是 24 位图像。因此错误。

尝试将它们转换为 8 位、位图

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多