コンボ ボックスの機能
このドキュメントでは、コンボ ボックスの機能について説明します。 詳細については、次のトピックを参照してください。
-
特別機能
- ディレクトリ リストの
- リスト アイテム に関連付けられているデータの
- 拡張ユーザー インターフェイス を する
- キュー バナー を する
- コンボ ボックス通知 を する
- 既定のコンボ ボックス動作 を する
特別な機能
アプリケーションがコンボ ボックスにディレクトリ一覧を表示したり、データをコンボ ボックス内のリスト 項目に関連付けたり、ドロップダウン コンボ ボックスまたはドロップダウン リスト ボックスのキーボード インターフェイスを変更したりするための特殊な目的のメッセージと関数があります。
- ディレクトリ リストの
- リスト アイテム に関連付けられているデータの
- 拡張ユーザー インターフェイス を する
- キュー バナー を する
ディレクトリ リスト
アプリケーションは、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 関数に渡されます。