コンボ ボックスの機能

このドキュメントでは、コンボ ボックスの機能について説明します。 詳細については、次のトピックを参照してください。

特別な機能

ディレクトリ一覧をコンボ ボックスに表示する、コンボ ボックス内のリスト アイテムにデータを関連付ける、ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスのキーボード インターフェイスを変更するといった操作をアプリケーションが実行できるようにする、特別な目的のメッセージや関数があります。

ディレクトリ一覧

アプリケーションは、CB_DIR メッセージをコンボ ボックスに送信することで、ファイルまたはサブディレクトリの名前をコンボ ボックスに追加できます。 このメッセージの wParam パラメーターで、追加するファイルの属性を指定します。また、lParam パラメーターは、ファイルの仕様を定義するテキスト文字列へのポインターです。

DlgDirListComboBox 関数を使用して、ダイアログ ボックス内のコンボ ボックスの内容を置き換えることができます。 この関数は、指定された条件のセットに一致するドライブ、ディレクトリ、ファイルの名前をコンボ ボックスに入力します。 DlgDirSelectComboBoxEx 関数は、DlgDirListComboBox によって初期化されたコンボ ボックス内の現在の選択内容を取得します。 これらの関数を使用すると、ユーザーがファイルの場所と名前を入力しなくても、コンボ ボックスからドライブ、ディレクトリ、またはファイルを選択できるようになります。

DlgDirListComboBox 関数と DlgDirSelectComboBoxEx 関数、および CB_DIR メッセージは、リスト ボックスで使用される DlgDirList 関数と DlgDirSelectEx 関数、および LB_DIR メッセージと似ています。

リスト アイテムに関連付けられたデータ

アプリケーションは、コンボ ボックス内のリスト アイテムにデータを関連付けることができます。 CB_SETITEMDATA メッセージは、DWORD 値をリスト アイテムに関連付けます。また、CB_GETITEMDATA は、リスト アイテムに関連付けられた値を取得します。

所有者描画コンボ ボックスの作成」の例では、アイテムのデータを使用して、ドロップダウン リスト ボックス内の各アイテムに定数を関連付けています。 これらの一意の値は、並べ替えられた位置とは関係なく、各項目を識別します。

アプリケーションによっては、項目データを使用して、ハンドルまたはポインターをリスト アイテムに関連付ける場合があります。 その場合、リスト アイテムが削除されたときに、アプリケーションは WM_DELETEITEM メッセージを処理することで、指定されたオブジェクトを削除するか解放することができます。

拡張ユーザー インターフェイス

ドロップダウン コンボ ボックスとドロップダウン リスト ボックスは、拡張ユーザー インターフェイスと呼ばれる代替キーボード インターフェイスをサポートしています。 既定では、F4 キーを押すとリストが開いたり閉じたりし、下方向キーを押すと現在の選択範囲が変更されます。 しかし、拡張ユーザー インターフェイスが設定されたコンボ ボックスでは、F4 キーが無効になり、下方向キーを押すとドロップダウン リストが開きます。 さらに、拡張 UI が設定されている場合、通常であればリスト内の項目をスクロールするマウス ホイールが機能しません。

コンボ ボックスのユーザー インターフェイスを選択するには、アプリケーションで CB_SETEXTENDEDUI メッセージをコンボ ボックスに送信します。 wParam パラメーターの値を TRUE にすると、拡張ユーザー インターフェイスが有効になります。値を FALSE にすると、既定のユーザー インターフェイスが設定されます。 コンボ ボックスで拡張ユーザー インターフェイスが使用されているかどうかを判別するには、アプリケーションで CB_GETEXTENDEDUI メッセージをコンボ ボックスに送信します。

キュー バナー

キュー バナーは、編集コントロールとコンボ ボックスの新機能です。 キュー バナーの目的は、編集コントロールまたはコンボ ボックスの目的に関するヒントをユーザーに提供することです。 次のスクリーン ショットは、キュー テキスト "Search" を含む編集コントロールを示します。

screen shot of an edit control with the cue text

キュー バナーのテキストは、編集コントロールにテキストがない場合、またはコンボ ボックスで選択が行われていない場合に表示されます。 ユーザーが編集コントロールにテキストを入力するか、コンボ ボックスで選択を行うと、キュー バナーは非表示になります。 既定では、編集コントロールまたはコンボ ボックスがフォーカスを取得すると、キュー バナーも非表示になります。

コンボ ボックスの通知

コンボ ボックスからのメッセージは、WM_COMMAND メッセージの形式で通知コードとして送信されます。 通知コードは、wParam パラメーターの上位ワードに格納され、アプリケーションは以下のコンボ ボックス通知コードを処理できます。

通知コード 説明
CBN_CLOSEUP ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックス内のリストが閉じられようとしていることを示します。
CBN_DBLCLK 単純なコンボ ボックスでユーザーがリスト アイテムをダブルクリックしたことを示します。
CBN_DROPDOWN ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックス内のリストが開かれようとしていることを示します。
CBN_EDITCHANGE 単純なコンボ ボックスまたはドロップダウン コンボ ボックスの編集コントロールのテキストをユーザーが変更したことを示します。 この通知コードは、変更されたテキストが表示されたに送信されます。
CBN_EDITUPDATE 単純なコンボ ボックスまたはドロップダウン コンボ ボックスの編集コントロールのテキストをユーザーが変更したことを示します。 この通知コードは、変更されたテキストが表示されるに送信されます。
CBN_ERRSPACE コンボ ボックスで、リスト アイテムの追加などの要求を実行するのに十分なメモリを割り当てられないことを示します。
CBN_KILLFOCUS コンボ ボックスが入力フォーカスを失おうとしていることを示します。
CBN_SELCHANGE 現在の選択範囲が変更されたことを示します。
CBN_SELENDCANCEL ドロップダウン リストが開いている間にそのリスト行われた選択を、無視する必要があることを示します。
CBN_SELENDOK ドロップダウン リストが開いている間にそのリスト行われた選択を、受け付ける必要があることを示します。
CBN_SETFOCUS コンボ ボックスが入力フォーカスを取得したことを示します。

 

コンボ ボックスの既定の動作

次の表では、定義済みの COMBOBOX クラス ウィンドウ プロシージャで特別な処理が行われるメッセージについて説明します。

メッセージ 説明
CB_ADDSTRING LB_ADDSTRING メッセージをリスト ウィンドウに送信して、リスト アイテムを追加します。
CB_DELETESTRING LB_DELETESTRING メッセージをリスト ウィンドウに送信して、リスト アイテムを削除します。
CB_DIR 指定された属性とパスに一致するファイル名をリストに追加します。
CB_FINDSTRING LB_FINDSTRING メッセージをリスト ウィンドウに送信します。 このメッセージは、指定されたテキストで始まる最初のリスト アイテムのインデックスを返します。
CB_FINDSTRINGEXACT LB_FINDSTRING メッセージをリスト ウィンドウに送信します。 このメッセージは、指定されたテキストと完全に一致する最初のリスト アイテムのインデックスを返します。
CB_GETCOUNT LB_GETCOUNT メッセージをリスト ウィンドウに送信します。 リスト アイテムの数を返します。
CB_GETCURSEL LB_GETCURSEL メッセージをリスト ウィンドウに送信します。 現在選択されている項目があれば、そのインデックスを返します。
CB_GETDROPPEDCONTROLRECT 指定された四角形の構造体に、ドロップダウン リストの画面座標を入力します。
CB_GETDROPPEDSTATE ドロップダウン リストが開いている場合は TRUE を返し、そうでない場合は FALSE を返します。
CB_GETDROPPEDWIDTH ドロップダウン リストの最小許容幅 (ピクセル単位) を返します。
CB_GETEDITSEL EM_GETSEL メッセージを編集コントロールに送信します。現在の選択の開始位置と終了位置を返します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
CB_GETEXTENDEDUI コンボ ボックスがドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスである場合は TRUE を返し、拡張ユーザー インターフェイスのフラグが設定されます。そうでない場合は、FALSE を返します。
CB_GETHORIZONTALEXTENT LB_GETHORIZONTALEXTENT メッセージをリスト ウィンドウに送信します。 ドロップダウン リストのスクロール可能な幅 (ピクセル単位) を返します。
CB_GETITEMDATA LB_GETITEMDATA メッセージをリスト ウィンドウに送信します。 指定されたリスト アイテムに関連付けられている値を返します。
CB_GETITEMHEIGHT LB_GETITEMHEIGHT メッセージをリスト ウィンドウに送信します。 指定された所有者描画リスト アイテムの高さ (ピクセル単位) を返します。
CB_GETLBTEXT LB_GETTEXT メッセージをリスト ウィンドウに送信します。 指定されたリスト テキストを、指定されたバッファーにコピーします。
CB_GETLBTEXTLEN LB_GETTEXTLEN メッセージをリスト ウィンドウに送信します。 指定されたリスト テキストの長さを、TCHARsで返します。
CB_GETLOCALE LB_GETLOCALE メッセージをリスト ウィンドウに送信します。 リストの現在のロケールを返します。
CB_GETMINVISIBLE コンボ ボックスのドロップダウン リスト内に表示されている項目の最小数を取得します。
CB_GETTOPINDEX LB_GETTOPINDEX メッセージをリスト ウィンドウに送信します。 ドロップダウン リスト内で最初に表示されている項目のインデックスを返します。
CB_INITSTORAGE LB_INITSTORAGE メッセージをリスト ウィンドウに送信します。 指定された数の項目用の領域と、項目の文字列について指定されたバイト数を初期化します。
CB_INSERTSTRING LB_INSERTSTRING メッセージをリスト ウィンドウに送信します。 指定された位置にリスト アイテムを挿入します。
CB_LIMITTEXT EM_LIMITTEXT メッセージを編集コントロールに送信します。 ユーザーが編集コントロールに入力できる最大文字数を設定します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
CB_RESETCONTENT LB_RESETCONTENT メッセージをリスト ウィンドウに送信します。リストの内容が削除されます。
CB_SELECTSTRING LB_SELECTSTRING メッセージをリスト ウィンドウに送信します。 指定されたテキスト内の文字で始まるリスト アイテムがあれば、その最初のリスト アイテムを選択します。
CB_SETCURSEL LB_SETCURSEL メッセージをリスト ウィンドウに送信します。現在の選択内容が設定されます。
CB_SETDROPPEDWIDTH ドロップダウン リストの最小許容幅 (ピクセル単位) を設定します。
CB_SETEDITSEL EM_SETSEL メッセージを編集コントロールに送信します。 指定されたテキスト範囲を選択します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
CB_SETEXTENDEDUI 拡張ユーザー インターフェイスのフラグを設定またはクリアします。 このフラグでは、ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスでリストを開いたり閉じたりするキーが変更されます。 コンボ ボックスが単純なコンボ ボックスの場合、このウィンドウ プロシージャは CB_ERR を返します。
CB_SETHORIZONTALEXTENT LB_SETHORIZONTALEXTENT メッセージをリスト ウィンドウに送信します。 ドロップダウン リストのスクロール可能な幅 (ピクセル単位) を設定します。
CB_SETITEMDATA LB_SETITEMDATA メッセージをリスト ウィンドウに送信します。 指定された値をリスト アイテムに関連付けます。
CB_SETITEMHEIGHT LB_SETITEMHEIGHT メッセージをリスト ウィンドウに送信します。 指定された所有者描画リスト アイテムまたは選択フィールドの高さを設定します。
CB_SETLOCALE LB_SETLOCALE メッセージをリスト ウィンドウに送信します。リストの現在のロケールを設定します。 このロケールは、リストに CBS_SORT スタイルが設定されており、文字列が CB_ADDSTRING を使用して追加されている場合、リストの並べ替えの方法に影響します。
CB_SETMINVISIBLE コンボ ボックスのドロップダウン リスト内に表示されている項目の最小数を設定します。
CB_SETTOPINDEX LB_SETTOPINDEX メッセージをリスト ウィンドウに送信します。 指定された項目が表示範囲の一番上になるように、ドロップダウン リストをスクロールします。
CB_SHOWDROPDOWN ドロップダウン リストを表示または非表示にします。 このメッセージは、単純なコンボ ボックスには影響しません。
WM_CHAR 文字入力を処理します。 ドロップダウン リスト ボックスでは、このメッセージはリスト ウィンドウに渡され、指定された文字で始まる最初の項目に選択範囲が移動します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、このメッセージは編集コントロールに渡されます。
WM_CLEAR 編集の選択を削除します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
WM_COMMAND 編集コントロールとリスト ウィンドウからの通知メッセージを処理し、対応するコンボ ボックス通知コードを親ウィンドウに送信します。
編集コントロール通知の場合、このウィンドウ プロシージャにより、リスト ウィンドウの現在の選択、キャレット インデックス、およびトップ インデックスが更新される可能性があります。 リスト通知メッセージの場合、このウィンドウ プロシージャにより、選択フィールドの内容が更新される可能性があります。
WM_COMPAREITEM メッセージを親ウィンドウに渡し、2 つの所有者描画リスト アイテムの相対的な並べ替え位置をアプリケーションが指定できるようにします。 コンボ ボックス ウィンドウは、リスト ウィンドウからこのメッセージを受け取ります。
WM_COPY 編集の選択をクリップボードにコピーします。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
WM_CREATE コンボ ボックスを初期化します。
WM_CUT 編集の選択を削除し、クリップボードに保存します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
WM_DELETEITEM 親ウィンドウにメッセージを渡し、リスト アイテムが削除されたことをアプリケーションに通知します。 コンボ ボックス ウィンドウは、リスト ウィンドウからこのメッセージを受け取ります。
WM_DRAWITEM メッセージを親ウィンドウに渡し、指定されたリスト アイテムをアプリケーションが描画できるようにします。 コンボ ボックス ウィンドウは、リスト ウィンドウからこのメッセージを受け取ります。 ウィンドウ プロシージャでこのメッセージを生成して、ドロップダウン リスト ボックスの選択フィールドをアプリケーションに描画させることもできます。
WM_ENABLE 状態を設定して、マウスとキーボードの入力を有効にするか禁止します。
WM_ERASEBKGND 1 を返します。これは、背景が消去されたことを示します。
WM_GETDLGCODE DLG_WANTCHARS 値と DLGC_WANTARROWS 値の組み合わせを返します。
WM_GETFONT コンボ ボックスでテキストの描画に使用される現在のフォントのハンドルを返します。
WM_GETTEXT 選択フィールドの内容を、指定されたバッファーにコピーします。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。
WM_GETTEXTLENGTH 選択フィールド内のテキストの長さ (文字数) を返します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。
WM_KEYDOWN 文字以外のキーボード入力を処理します。 ドロップダウン リスト ボックスでは、このメッセージはリスト ウィンドウに送信されます。このメッセージでは、メッセージ自体を表示または非表示にしたり、現在の選択やキャレット インデックスを変更したりできます。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、このメッセージは編集コントロールに渡されます。 編集コントロールは、上方向キーや下方向キー、F4 キーなど、特定のキーをリスト ウィンドウに渡します。
WM_KILLFOCUS 選択フィールドの強調表示を非表示にし、必要に応じてドロップダウン リストを閉じます。 入力フォーカスを取得するウィンドウがコンボ ボックスの一部 (たとえば編集コントロール) である場合、このメッセージは無視されます。
WM_LBUTTONDBLCLK WM_LBUTTONDOWN と同じです。
WM_LBUTTONDOWN フォーカスをコンボ ボックスに設定します。ドロップダウン コンボ ボックスとドロップダウン リストの場合は、リストを開いたり閉じたりできます。 リストを開く場合、ウィンドウ プロシージャがマウスをキャプチャし、マウス ボタンのドラッグと解放によって選択できるようになります。
WM_LBUTTONUP マウスでリストが開かれた場合は、マウス キャプチャを解放します。
WM_MEASUREITEM メッセージを親ウィンドウにポストし、指定された MEASUREITEMSTRUCT 構造体の内容をアプリケーションが変更できるようにします。 コンボ ボックス ウィンドウは、リスト ウィンドウからこのメッセージを受け取ります。
WM_MOUSEMOVE マウスでリストが開かれ、マウス ボタンがまだ押下されたままの場合は、メッセージをリスト ウィンドウにポストします。 これにより、ユーザーはマウス ポインターをリスト アイテムまでドラッグしてからボタンを離すことで項目を選択できるようになります。
WM_NCCREATE コンボ ボックス ウィンドウ プロシージャで使用される内部データ構造体を割り当てます。
WM_NCDESTROY WM_NCCREATE メッセージに応答して割り当てられたリソースを解放します。
WM_PAINT コンボ ボックスの無効な領域を描画します。 wParamNULL ではない場合は、デバイス コンテキスト (DC) ハンドルがサブクラス関数から渡されることが想定されます。 ウィンドウ プロシージャは、BeginPaint および EndPaint を呼び出す代わりに、指定された DC を使用します。
WM_PASTE 編集の選択をクリップボードの内容で置き換えます。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
WM_SETFOCUS 編集コントロールにフォーカスを設定します。または、ドロップダウン リスト ボックスの場合は、選択フィールドを反転し、リスト ウィンドウでキャレットをオンにします。
WM_SETFONT 指定されたフォント ハンドルを内部構造体に保存し、選択フィールドとリストの寸法を調整し、コンボ ボックス ウィンドウを無効にします。 選択フィールドとリストのテキストは、保存されたフォントで表示されます。
WM_SETREDRAW 再描画フラグを設定またはクリアします。 再描画フラグがクリアされている場合、そのコンボ ボックスは、フラグが再び設定されるまで再描画されません。
WM_SETTEXT 編集コントロールの内容を設定します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。
WM_SIZE 必要に応じて、子ウィンドウのサイズを変更します。
WM_SYSKEYDOWN ユーザーが押した方向キーに応じて、ドロップダウン リストを開くか閉じます。

 

その他のすべてのメッセージは、既定の処理を実行するために DefWindowProc 関数に渡されます。