使用Overdrawn Property

时间:2015-07-07 04:52:41

标签: c++ mfc assertions ownerdrawn ccombobox

我正在尝试使用以下代码创建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");

但是它给出了错误消息" Debug Assertion Failed"上

档案:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winctrl1.cpp, Line 271 当我尝试使用CBS_OWNERDRAWFIXED标志创建CCombobox时,才会出现此问题。有人请告诉我如何以编程方式创建CCombobox,并将所有者绘制的属性设置为已修复

1 个答案:

答案 0 :(得分:0)

要使用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);