0

次のコードで 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 この問題は、フラグ付きの CCombobox を作成しようとした場合にのみ発生しますCBS_OWNERDRAWFIXEDOwner Drawn プロパティをfixedに設定して CCombobox をプログラムで作成する方法を教えてください。

4

1 に答える 1

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

または、通常のコンボボックスを使用してフォントを変更することもできます。フォントをクラス メンバーとして宣言します。フォントを作成し、SetFontComboBox の作成後に呼び出します。

{
    CFont m_font;
    //...
}

cSearchBar->Create...
m_font.CreatePointFont(120, L"Segoe UI");
cSearchBar->SetFont(&m_font);
于 2015-07-07T07:09:02.630 に答える