0

スタイル付きのカスタム描画コンボボックスがCBS_DROPDOWNLISTありCBS_OWNERDRAWVARIABLE、ドロップダウンリストのアイテムを正常に描画できますが、ユーザーがアイテムを選択すると、コンボボックスの静的部分 [アイテムを選択した後に表示されたままになり、選択を表示するコンボの部分] に描画されます。次の画像のようにカスタムテキストを付けたい

ここに画像の説明を入力

しかし、私はこのようなコードを見つけました

    if(DrawItemStruct.CtlType == ODT_COMBOBOX)//the static part of the combo
        DrawComboText(pDC, DrawItemStruct.itemID, &DrawItemStruct.rcItem);
    else//the rest items
    {
        // Copy the text of the item to a string
        char sItem[256];
        GetString(sItem, DrawItemStruct.itemID);
        biDrawText(pDC, sItem, -1, &DrawItemStruct.rcItem, f | DT_VCENTER | DT_SINGLELINE);
    }

しかし、私がそれを使用したとき、CtlType == ODT_COMBOBOX私は上記のコードをデバッグしたとき、それODT_COMBOBOXは静的部分のために戻り、ドロップダウンリストの項目のためにそれを返しODT_LISTBOXます。

この問題を修正する方法を知りたいのですが、ドロップダウン リストで静的な部分または通常のアイテムを描画していることを検出する方法を教えてください。

4

1 に答える 1

1

ODS_COMBOBOXEDIT の状態を確認するだけです。このフラグが編集コントロールに設定されているとドキュメントに記載されている場合は、ドロップダウン リストで機能します。

私はあなたのようなコンボボックスの実装をチェックしましたが、それは正常に機能します。

bool bDrawStaticControl = (pDIS->itemState & ODS_COMBOBOXEDIT)!=0;
于 2014-03-10T09:09:25.040 に答える