Share via


ComboBoxEx コントロールについて

ComboBoxEx コントロールは、項目の画像のネイティブ サポートを提供するコンボ ボックス コントロールです。 項目イメージに簡単にアクセスできるようにするために、コントロールではイメージ リストがサポートされています。 このコントロールを使用すると、項目のグラフィックを手動で描画しなくても、コンボ ボックスの機能を提供できます。

このトピックは、次のセクションで構成されています。

ComboBoxEx コントロールの作成

実際には、ComboBoxEx コントロールが子コンボ ボックスを作成し、割り当てられた画像リストに基づいて所有者描画タスクを実行します。 このため、CBS_OWNERDRAWFIXED スタイルが暗黙的に設定されるため、コントロールの作成時にこのスタイルを使用する必要はありません。 画像リストを使用して項目のグラフィックが提供されるため、CBS_OWNERDRAWVARIABLE スタイルは使用できません。

ComboBoxEx コントロールは、付随する INITCOMMONCONTROLSEX 構造体で ICC_USEREX_CLASSES を指定して InitCommonControlsEx 関数を呼び出すことで、初期化する必要があります。

ComboBoxEx コントロールは、CreateWindowEx 関数を使用し、ウィンドウ クラスとして WC_COMBOBOXEX を指定することで作成できます。 このクラスは、前述のように、InitCommonControlsEx 関数が呼び出されたときに登録されます。

ComboBoxEx コントロールは、既定では画像リストなしで作成されます。 項目のイメージを使用するには、ComboBoxEx コントロール用の画像リストを作成し、CBEM_SETIMAGELIST メッセージを使用してコントロールに割り当てる必要があります。 ComboBoxEx コントロールに画像リストを割り当てない場合は、コントロールには項目テキストのみが表示されます。

ComboBoxEx コントロールのスタイル

ComboBoxEx コントロールは、以下の ComboBox スタイルのみをサポートしています。

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

ComboBoxEx でのみ使用できる ComboBoxEx コントロールの拡張スタイルもいくつかあります。

Note

場合によっては、CBS_SIMPLE スタイルが正常に動作しないことがあります。

 

割り当てられた画像リストに基づいて、ComboBoxEx コントロールがユーザーに代わって所有者描画タスクを実行するため、CBS_OWNERDRAWFIXED スタイルが暗黙的に使用されます。コントロールの作成時にこのスタイルを割り当てる必要はありません。 画像リストを使用して項目のグラフィックが提供されるため、CBS_OWNERDRAWVARIABLE スタイルは使用できません。 ComboBoxEx コントロールは、追加機能を提供する ComboBoxEx コントロールの拡張スタイルもサポートしています。

ComboBoxEx コントロールの項目

ComboBoxEx コントロールは、COMBOBOXEXITEM 構造体を使用して項目情報を保持します。 この構造体は、項目のインデックス、画像のインデックス (通常、選択状態、オーバーレイ)、インデント値、テキスト文字列、および項目固有の値をメンバーとして含みます。

ComboBoxEx コントロールを使用すると、メッセージを介して項目に簡単にアクセスし、操作することができます。 項目を追加または削除するには、CBEM_INSERTITEM メッセージまたは CBEM_DELETEITEM メッセージを送信します。 コントロールに現在ある項目は、CBEM_SETITEM メッセージを使用して変更できます。

コールバック項目

ComboBoxEx コントロールは、コールバック項目の属性をサポートしています。 CBEM_INSERTITEM を使用して項目をコントロールに追加するときに、項目をコールバック項目として指定できます。 項目の COMBOBOXEXITEM 構造体に値を割り当てるときに、適切なコールバック フラグ値を指定する必要があります。 COMBOBOXEXITEM 構造体のメンバーと、それに対応するコールバック フラグ値を以下に示します。

メンバー コールバック値
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

コントロールは、CBEN_GETDISPINFO 通知コードを送信することで、コールバック項目に関する情報を要求します。 この通知コードは、WM_NOTIFY メッセージの形式で送信されます。 アプリケーションがこのメッセージを処理するときに、要求された情報をコントロールに提供する必要があります。 付随する COMBOBOXEXITEM 構造体の mask メンバーを CBEIF_DI_SETITEM に設定した場合、コントロールはその項目データを保存し、再び要求することはありません。

ComboBoxEx コントロールの画像リスト

ComboBoxEx コントロールで項目と共にアイコンを表示する場合は、画像リストを指定する必要があります。 ComboBoxEx コントロールでは、1 つの項目に対して最大 3 つの画像がサポートされます。1 つは選択された状態用、1 つは選択されていない状態用、1 つはオーバーレイ画像用です。 CBEM_SETIMAGELIST メッセージを使用して、既存の画像リストを ComboBoxEx コントロールに割り当てます。

COMBOBOXEXITEM 構造体には、各画像リスト (選択された状態、選択されていない状態、オーバーレイ) の画像インデックスを表すメンバーが格納されます。 項目ごとに、目的の画像を表示するようにこれらのメンバーを設定します。 画像の種類ごとに画像インデックスを指定する必要はありません。 画像の種類は自由に組み合わせることができますが、どのメンバーが使用されているのかを示すために、常に COMBOBOXEXITEM 構造体の mask メンバーを設定します。 コントロールは、有効のフラグが設定されていないメンバーを無視します。

Note

CBS_SIMPLE スタイルを使用する場合、アイコンは表示されません。

 

ComboBoxEx コントロールの通知メッセージについて

ComboBoxEx コントロールは、コントール内での変更を報告したり、コールバック項目情報を要求したりするために、通知メッセージを送信します。 コントロールの親は、ComboBoxEx コントロール内に含まれるコンボ ボックスからのすべての WM_COMMAND メッセージを受信します。 ComboBoxEx コントロールは、WM_NOTIFY メッセージを使用して、それ自体の通知を送信します。 このため、コントロールのオーナーは、どちらの形式の通知メッセージでも処理できるように準備する必要があります。

WM_NOTIFY メッセージを介して送信される、ComboBoxEx 固有の通知コードを以下に示します。

Notification 説明
CBEN_BEGINEDIT ユーザーがドロップダウン リストをアクティブにしたか、コントロールの編集ボックスをクリックしたことを通知します。
CBEN_ENDEDIT ユーザーがドロップダウン リストから項目を選択したか、編集ボックス内での編集操作を完了したことを通知します。
CBEN_DELETEITEM 項目が削除されたことを報告します。
CBEN_GETDISPINFO 項目の属性に関する情報を要求します。
CBEN_INSERTITEM コントロールに項目が挿入されたことを通知します。

 

ComboBoxEx コントロールのメッセージ転送

ComboBoxEx コントロールが子コンボ ボックスに転送する、標準のコンボ ボックス メッセージを以下に示します。 これらのメッセージの一部は、メッセージが転送される前または後に ComboBoxEx コントロールによって処理される場合があります。

ComboBoxEx コントロールが親ウィンドウに転送するウィンドウ メッセージを以下に示します。