ComboBoxEx コントロールについて

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

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

ComboBoxEx コントロールの作成

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

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

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 構造体のマスク メンバーをCBEIF_DI_SETITEMに設定した場合、コントロールは項目データを格納し、再び要求しません。

ComboBoxEx コントロールイメージリスト

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

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

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 コントロールが親ウィンドウに転送するウィンドウ メッセージを次に示します。