我正在尝试使用以下代码创建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,并将所有者绘制的属性设置为已修复。
答案 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);