【问题标题】:Debug Assertion Failed while creating CCombobox with Overdrawn Property使用 Overdrawn 属性创建 CCombobox 时调试断言失败
【发布时间】:2015-09-24 10:25:21
【问题描述】:

我正在尝试使用以下代码创建一个 CCombobox:

    CComboBox* cSearchBar = new CComboBox();
if (!cSearchBar->Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | CBS_OWNERDRAWFIXED | CBS_DROPDOWN | CBS_AUTOHSCROLL,  CRect(150,10,325,15), this, IDC_COMBO))
    TRACE0("Failed to create search bar\n");

但它给出了“调试断言失败”的错误消息

文件:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winctrl1.cpp, Line 271 仅当我尝试使用 CBS_OWNERDRAWFIXED 标志创建 CCombobox 时才会出现此问题。有人请告诉我如何以编程方式创建一个 CCombobox,并将 Owner Drawn 属性设置为 fixed

【问题讨论】:

  • 调试断言评估一个表达式。这应该可以很好地提示您出了什么问题。 (注意:你有源代码。)

标签: c++ mfc assertions ownerdrawn ccombobox


【解决方案1】:

要使用 ownerdraw 控件,您必须使用自己的类。

class CMyComboBox : public CComboBox
{
public:
    void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    void MeasureItem(LPMEASUREITEMSTRUCT ms);//ms->itemHeight = 15...
};

示例: https://msdn.microsoft.com/en-us/library/y5hb5f9t.aspx

或者您可以使用常规组合框并更改其字体。将字体声明为类成员。创建字体并在 ComboBox 创建后调用SetFont

{
    CFont m_font;
    //...
}

cSearchBar->Create...
m_font.CreatePointFont(120, L"Segoe UI");
cSearchBar->SetFont(&m_font);

【讨论】:

  • 不一样。之前的错误很可能是由于缺少MeasureItem。在您的计算机上,该文件可能位于此处:C:\Program Files (x86)\Microsoft Visual Studio VERSION\VC\atlmfc\src\mfc\winctrl1.cpp,您可以按照其他评论中的建议进行检查。
  • 在我的情况下它保持不变,也许我没有遵循正确的方法......好吧,您还建议我使用常规组合框并更改其字体,请您详细说明如何做吗?
  • 我更新了字体选项的答案。确保字体未声明为局部变量。字体必须声明为类成员或全局。
  • 我在同一行仍然面临同样的“调试断言失败”问题。
  • 然后删除CBS_OWNERDRAWFIXED标志并创建一个常规组合框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多