CComboBox クラス
更新 : 2007 年 11 月
Windows のコンボ ボックスの機能が用意されています。
class CComboBox : public CWnd
解説
コンボ ボックスは、静的コントロールまたはエディット コントロールのいずれかとリスト ボックスを組み合わせたものです。コントロールのリスト ボックス部分は、常に表示することも、ユーザーがエディット コントロールの横のドロップダウン矢印を選択したときだけ表示することもできます。
リスト ボックスで現在選択されている項目があると、その項目が静的コントロールまたはエディット コントロールに表示されます。また、ドロップダウン リスト スタイルが指定されているコンボ ボックスでは、ユーザーがリスト ボックス内にある項目の先頭の文字を入力できます。リスト ボックスが表示されている場合、入力された文字で始まる次の項目が強調表示されます。
コンボ ボックスの 3 つのスタイルを次の表で比較します。
スタイル |
リスト ボックスが表示されるとき |
コントロールの種類 |
---|---|---|
シンプル |
常時 |
エディット コントロール |
ドロップダウン |
ドロップダウンされたとき |
エディット コントロール |
ドロップダウン リスト |
ドロップダウンされたとき |
静的コントロール |
CComboBox オブジェクトを作成するには、ダイアログ テンプレートを使用するか、直接コードを記述します。いずれの場合も、まず CComboBox クラスのコンストラクタを呼び出して CComboBox オブジェクトを構築します。続いて、コントロールを作成するために Create メンバ関数を呼び出し、作成したコントロールを CComboBox オブジェクトを結び付けます。
CComboBox オブジェクトからその親クラス (通常は CDialog の派生クラス) に送られた Windows の通知メッセージを処理するには、各メッセージの送信先の親クラスに、メッセージ マップのエントリとメッセージ ハンドラ メンバ関数を追加します。
各メッセージ マップのエントリは次の形式を持ちます。
ON_Notification( id**,** memberFxn )
id には、通知を送るコンボ ボックス コントロールの子ウィンドウ ID を指定します。memberFxn には、通知を処理する親クラスのメンバ関数名を指定します。
親の関数のプロトタイプは次のようになります。
afx_msg void memberFxn**(** );
送られてくる通知の順序は決まっていません。特に、CBN_SELCHANGE 通知は、CBN_CLOSEUP 通知の前に発生するのか、後に発生するのかがわかりません。
有効なメッセージ マップのエントリを次に示します。
ON_CBN_CLOSEUP (Windows 3.1 以降)コンボ ボックスのリスト ボックスが閉じられました。この通知メッセージは、CBS_SIMPLE スタイルを持つコンボ ボックスについては送られません。
ON_CBN_DBLCLK コンボ ボックスのリスト ボックス内の文字列がダブルクリックされました。この通知メッセージは、CBS_SIMPLE スタイルを持つコンボ ボックスについてだけ送られます。CBS_DROPDOWN スタイルまたは CBS_DROPDOWNLIST スタイルを持つコンボ ボックスでは、シングルクリックするとリスト ボックスが非表示になるので、ダブルクリックされることはありません。
ON_CBN_DROPDOWN コンボ ボックスのリスト ボックスがドロップダウンされる直前であることを通知します。この後で、リスト ボックスが表示されます。この通知メッセージは、CBS_DROPDOWN または CBS_DROPDOWNLIST スタイルを持つコンボ ボックスについてだけ送られます。
ON_CBN_EDITCHANGE コンボ ボックスのエディット コントロール部分に表示されているテキストが変更されました。このメッセージは、CBN_EDITUPDATE メッセージと異なり、Windows が画面を更新した後で送られます。このメッセージはコンボ ボックスが CBS_DROPDOWNLIST スタイルを持つときには送られません。
ON_CBN_EDITUPDATE コンボ ボックスのエディット コントロール部分に、変更されたテキストが表示される直前であることを通知します。この通知メッセージは、コントロールがテキストの書式を設定し、そのテキストを表示するまでの間に送られます。このメッセージはコンボ ボックスが CBS_DROPDOWNLIST スタイルを持つときには送られません。
ON_CBN_ERRSPACE コンボ ボックスで、指定された要求に対して十分なメモリの割り当てができなかったことを通知します。
ON_CBN_SELENDCANCEL (Windows 3.1 以降)ユーザーによる選択がキャンセルされることを通知します。つまり、ユーザーが項目をクリックしてから、ほかのウィンドウやコントロールをクリックし、コンボ ボックスのリスト ボックスを非表示にした場合などです。この通知メッセージは、選択が無効になったことを伝えるため、CBN_CLOSEUP 通知メッセージの前に送られます。CBN_SELENDCANCEL または CBN_SELENDOK 通知メッセージは、CBN_CLOSEUP 通知メッセージが送られない場合 (コンボ ボックスが CBS_SIMPLE スタイルを持つ場合) でも送られます。
ON_CBN_SELENDOK ユーザーが、項目を選択した後で、Enter キーを入力するか下向き矢印をクリックして、コンボ ボックスのリスト ボックスを非表示にしたことを通知します。この通知メッセージは、ユーザーによる選択が有効であることを伝えるために CBN_CLOSEUP メッセージの前に送られます。CBN_SELENDCANCEL または CBN_SELENDOK 通知メッセージは、CBN_CLOSEUP 通知メッセージが送られない場合 (コンボ ボックスが CBS_SIMPLE スタイルを持つ場合) でも送られます。
ON_CBN_KILLFOCUS コンボ ボックスが入力フォーカスを失うことを通知します。
ON_CBN_SELCHANGE ユーザーがリスト ボックス内でクリックするか、方向キーを使って選択を変更した結果、コンボ ボックスのリスト ボックスで選択されている内容が変わることを通知します。このメッセージを処理するとき、コンボ ボックスのエディット コントロール内のテキストを取得するには、GetLBText 関数または別の同種の関数を使います。GetWindowText 関数は使用できません。
ON_CBN_SETFOCUS コンボ ボックスが入力フォーカスを得たことを通知します。
ダイアログ ボックス内に (ダイアログ リソースを使って) CComboBox オブジェクトを作成したときは、ダイアログ ボックスを閉じたときに CComboBox オブジェクトは自動的に破棄されます。
その他のウィンドウ オブジェクトに CComboBox オブジェクトを埋め込んだときは、オブジェクトを破棄する必要はありません。CComboBox オブジェクトをスタック上に作成したときは、自動的に破棄されます。CComboBox オブジェクトを new 関数を使ってヒープ領域に作成したときは、Windows のコンボ ボックスを破棄したときにオブジェクトが破棄されるように、オブジェクトに対する delete 関数を呼び出します。
メモ WM_KEYDOWN メッセージと WM_CHAR メッセージを処理する場合は、コンボ ボックスのエディット コントロールとリスト ボックス コントロールをサブクラス化し、CEdit と CListBox からクラスを派生させ、その派生クラスにこれらのメッセージのハンドラを追加する必要があります。詳細については、https://support.microsoft.com/kb/174667/ja および「CWnd::SubclassWindow」を参照してください。
必要条件
ヘッダー : afxwin.h
参照
処理手順
CTRLBARS サンプル : カスタム コントロール バー