コンボ ボックスの機能
このドキュメントでは、コンボ ボックスの機能について説明します。 詳細については、次のトピックを参照してください。
特別な機能
ディレクトリ一覧をコンボ ボックスに表示する、コンボ ボックス内のリスト アイテムにデータを関連付ける、ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスのキーボード インターフェイスを変更するといった操作をアプリケーションが実行できるようにする、特別な目的のメッセージや関数があります。
ディレクトリ一覧
アプリケーションは、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" を含む編集コントロールを示します。
キュー バナーのテキストは、編集コントロールにテキストがない場合、またはコンボ ボックスで選択が行われていない場合に表示されます。 ユーザーが編集コントロールにテキストを入力するか、コンボ ボックスで選択を行うと、キュー バナーは非表示になります。 既定では、編集コントロールまたはコンボ ボックスがフォーカスを取得すると、キュー バナーも非表示になります。
コンボ ボックスの通知
コンボ ボックスからのメッセージは、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 | コンボ ボックスの無効な領域を描画します。 wParam が NULL ではない場合は、デバイス コンテキスト (DC) ハンドルがサブクラス関数から渡されることが想定されます。 ウィンドウ プロシージャは、BeginPaint および EndPaint を呼び出す代わりに、指定された DC を使用します。 |
WM_PASTE | 編集の選択をクリップボードの内容で置き換えます。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。 |
WM_SETFOCUS | 編集コントロールにフォーカスを設定します。または、ドロップダウン リスト ボックスの場合は、選択フィールドを反転し、リスト ウィンドウでキャレットをオンにします。 |
WM_SETFONT | 指定されたフォント ハンドルを内部構造体に保存し、選択フィールドとリストの寸法を調整し、コンボ ボックス ウィンドウを無効にします。 選択フィールドとリストのテキストは、保存されたフォントで表示されます。 |
WM_SETREDRAW | 再描画フラグを設定またはクリアします。 再描画フラグがクリアされている場合、そのコンボ ボックスは、フラグが再び設定されるまで再描画されません。 |
WM_SETTEXT | 編集コントロールの内容を設定します。 単純なコンボ ボックスとドロップダウン コンボ ボックスでは、編集コントロールがこのメッセージを処理します。 ドロップダウン リスト ボックスでは、このウィンドウ プロシージャは CB_ERR を返します。 |
WM_SIZE | 必要に応じて、子ウィンドウのサイズを変更します。 |
WM_SYSKEYDOWN | ユーザーが押した方向キーに応じて、ドロップダウン リストを開くか閉じます。 |
その他のすべてのメッセージは、既定の処理を実行するために DefWindowProc 関数に渡されます。