次の方法で共有


コンボ ボックスの機能

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

特別な機能

アプリケーションがコンボ ボックスにディレクトリ一覧を表示したり、データをコンボ ボックス内のリスト 項目に関連付けたり、ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスのキーボード インターフェイスを変更したりするための特殊な目的のメッセージと関数があります。

ディレクトリ リスト

アプリケーションは、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" を含む編集コントロールを示しています。

キュー テキスト "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 メッセージをリスト ウィンドウに送信します。 指定したリスト テキストの長さ (TCHAR) を返します。
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 関数に渡されます。