CComboBox
クラス
Windows のコンボ ボックスの機能が用意されています。
構文
class CComboBox : public CWnd
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CComboBox::CComboBox |
CComboBox オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CComboBox::AddString |
コンボ ボックスのリスト ボックスの末尾、または CBS_SORT スタイルのリスト ボックスの並べ替えられた位置に文字列を追加します。 |
CComboBox::Clear |
編集コントロール内の現在の選択範囲 (存在する場合) を削除 (クリア) します。 |
CComboBox::CompareItem |
並べ替えられた所有者描画コンボ ボックス内の新しいリスト アイテムの相対位置を決定するために、フレームワークによって呼び出されます。 |
CComboBox::Copy |
現在の選択範囲がある場合は、 CF_TEXT 形式でクリップボードにコピーします。 |
CComboBox::Create |
コンボ ボックスを作成し、 CComboBox オブジェクトにアタッチします。 |
CComboBox::Cut |
編集コントロール内の現在の選択範囲を削除 (切り取り) し、削除したテキストを CF_TEXT 形式でクリップボードにコピーします。 |
CComboBox::DeleteItem |
所有者が描画したコンボ ボックスからリスト アイテムが削除されたときにフレームワークによって呼び出されます。 |
CComboBox::DeleteString |
コンボ ボックスのリスト ボックスから文字列を削除します。 |
CComboBox::Dir |
コンボ ボックスのリスト ボックスにファイル名のリストを追加します。 |
CComboBox::DrawItem |
所有者描画コンボ ボックスの視覚的な側面が変更されたときにフレームワークによって呼び出されます。 |
CComboBox::FindString |
コンボ ボックスのリスト ボックスで、指定したプレフィックスを含む最初の文字列を検索します。 |
CComboBox::FindStringExact |
指定した文字列と一致する最初のリスト ボックス文字列 (コンボ ボックス内) を検索します。 |
CComboBox::GetComboBoxInfo |
CComboBox オブジェクトに関する情報を取得します。 |
CComboBox::GetCount |
コンボ ボックスのリスト ボックス内の項目数を取得します。 |
CComboBox::GetCueBanner |
コンボ ボックス コントロールに表示されるキュー テキストを取得します。 |
CComboBox::GetCurSel |
コンボ ボックスのリスト ボックスで、現在選択されている項目のインデックス (存在する場合) を取得します。 |
CComboBox::GetDroppedControlRect |
ドロップダウン コンボ ボックスの表示 (ドロップ ダウン) リスト ボックスの画面座標を取得します。 |
CComboBox::GetDroppedState |
ドロップダウン コンボ ボックスのリスト ボックスを表示 (ドロップ ダウン) するかどうかを指定します。 |
CComboBox::GetDroppedWidth |
コンボ ボックスのドロップダウン リスト ボックス部分の最小許容幅を取得します。 |
CComboBox::GetEditSel |
コンボ ボックスのエディット コントロール内の現在の選択範囲の先頭と最後の文字の位置を取得します。 |
CComboBox::GetExtendedUI |
コンボ ボックスで既定のユーザー インターフェイスを使用しているのか、または拡張ユーザー インターフェイスを使用しているのかを判別します。 |
CComboBox::GetHorizontalExtent |
コンボ ボックスのリスト ボックス部分を水平方向にスクロールできる幅をピクセル単位で返します。 |
CComboBox::GetItemData |
指定したコンボ ボックス項目に関連付けられているアプリケーション指定の 32 ビット値を取得します。 |
CComboBox::GetItemDataPtr |
指定したコンボ ボックス項目に関連付けられているアプリケーション提供の 32 ビット ポインターを取得します。 |
CComboBox::GetItemHeight |
コンボ ボックス内にあるリスト アイテムの高さを取得します。 |
CComboBox::GetLBText |
コンボ ボックスのリスト ボックスから文字列を取得します。 |
CComboBox::GetLBTextLen |
コンボ ボックスのリスト ボックス内の文字列の長さを取得します。 |
CComboBox::GetLocale |
コンボ ボックスのロケール識別子を取得します。 |
CComboBox::GetMinVisible |
現在のコンボ ボックスのドロップダウン リストに表示される項目の最小数を取得します。 |
CComboBox::GetTopIndex |
コンボ ボックスのリスト ボックス部分の最初に表示される項目のインデックスを返します。 |
CComboBox::InitStorage |
コンボ ボックスのリスト ボックス部分の項目と文字列のメモリ ブロックを事前割り当てします。 |
CComboBox::InsertString |
コンボ ボックスのリスト ボックスに文字列を挿入します。 |
CComboBox::LimitText |
ユーザーがコンボ ボックスの編集コントロールに入力できるテキストの長さを制限します。 |
CComboBox::MeasureItem |
所有者が描画したコンボ ボックスの作成時にコンボ ボックスディメンションを決定するためにフレームワークによって呼び出されます。 |
CComboBox::Paste |
クリップボードから現在のカーソル位置にある編集コントロールにデータを挿入します。 データは、クリップボードに CF_TEXT 形式のデータが含まれている場合にのみ挿入されます。 |
CComboBox::ResetContent |
コンボ ボックスのリスト ボックスと編集コントロールからすべての項目を削除します。 |
CComboBox::SelectString |
コンボ ボックスのリスト ボックスで文字列を検索し、文字列が見つかった場合は、リスト ボックスで文字列を選択し、その文字列を編集コントロールにコピーします。 |
CComboBox::SetCueBanner |
コンボ ボックス コントロールに表示されるキュー テキストを設定します。 |
CComboBox::SetCurSel |
コンボ ボックスのリスト ボックスで文字列を選択します。 |
CComboBox::SetDroppedWidth |
コンボ ボックスのドロップダウン リスト ボックス部分の最小許容幅を設定します。 |
CComboBox::SetEditSel |
コンボ ボックスの編集コントロールで文字を選択します。 |
CComboBox::SetExtendedUI |
CBS_DROPDOWN またはCBS_DROPDOWNLIST スタイルを持つコンボ ボックスの既定のユーザー インターフェイスまたは拡張ユーザー インターフェイスを選択します。 |
CComboBox::SetHorizontalExtent |
コンボ ボックスのリスト ボックス部分を水平方向にスクロールできる幅をピクセル単位で設定します。 |
CComboBox::SetItemData |
コンボ ボックス内の指定した項目に関連付けられた 32 ビット値を設定します。 |
CComboBox::SetItemDataPtr |
コンボ ボックス内の指定した項目に関連付けられた 32 ビット ポインターを設定します。 |
CComboBox::SetItemHeight |
コンボ ボックス内のリスト 項目の高さ、またはコンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さを設定します。 |
CComboBox::SetLocale |
コンボ ボックスのロケール識別子を設定します。 |
CComboBox::SetMinVisibleItems |
現在のコンボ ボックスのドロップダウン リストに表示される項目の最小数を設定します。 |
CComboBox::SetTopIndex |
コンボ ボックスのリスト ボックス部分に、指定したインデックスを持つ項目を上部に表示するように指示します。 |
CComboBox::ShowDropDown |
CBS_DROPDOWN またはCBS_DROPDOWNLIST スタイルを持つコンボ ボックスのリスト ボックスを表示または非表示にします。 |
解説
コンボ ボックスは、リスト ボックスと静的コントロールまたは編集コントロールの組み合わせで構成されます。 コントロールのリスト ボックス部分は、常に表示される場合もあれば、ユーザーがコントロールの横にあるドロップダウン矢印を選択した場合にのみドロップダウンすることもできます。
リスト ボックスで現在選択されている項目 (存在する場合) は、静的コントロールまたは編集コントロールに表示されます。 さらに、コンボ ボックスにドロップダウン リスト スタイルがある場合、ユーザーはリスト内のいずれかの項目の最初の文字を入力できます。リスト ボックスが表示されている場合は、その最初の文字で次の項目が強調表示されます。
次の表は、3 つのコンボ ボックス stylesを比較しています。
スタイル | リスト ボックスが表示されるタイミング | 静的コントロールまたは編集コントロール |
---|---|---|
簡易 | 常時 | 編集 |
ドロップダウン | ドロップダウン時 | 編集 |
ドロップダウン リスト | ドロップダウン時 | 静的 |
CComboBox
オブジェクトは、ダイアログ テンプレートから作成することも、コード内で直接作成することもできます。 どちらの場合も、最初にコンストラクター CComboBox
を呼び出して CComboBox
オブジェクトを構築し、次に Create
メンバー関数を呼び出してコントロールを作成し、 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
スタイルのコンボ ボックスの場合、1 回のクリックでリスト ボックスが非表示になるため、ダブルクリックを実行できません。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
通知メッセージは、(CBS_SIMPLE
スタイルのコンボ ボックスの場合と同様に)CBN_CLOSEUP
通知メッセージが送信されない場合でも送信されます。ON_CBN_SELENDOK
ユーザーが項目を選択し、Enter キーを押すか、下方向キーをクリックしてコンボ ボックスのリスト ボックスを非表示にします。 この通知メッセージは、ユーザーの選択が有効と見なされることを示すCBN_CLOSEUP
メッセージの前に送信されます。CBN_SELENDCANCEL
またはCBN_SELENDOK
通知メッセージは、(CBS_SIMPLE
スタイルのコンボ ボックスの場合と同様に)CBN_CLOSEUP
通知メッセージが送信されない場合でも送信されます。ON_CBN_KILLFOCUS
コンボ ボックスが入力フォーカスを失います。ON_CBN_SELCHANGE
コンボ ボックスのリスト ボックスでの選択は、ユーザーがリスト ボックス内をクリックするか、方向キーを使用して選択範囲を変更した結果として変更されようとしています。 このメッセージを処理する場合、コンボ ボックスの編集コントロール内のテキストは、GetLBText
または他の同様の関数を介してのみ取得できます。GetWindowText
は使用できません。ON_CBN_SETFOCUS
コンボ ボックスは入力フォーカスを受け取ります。
ダイアログ ボックス内に (ダイアログ リソースを使用して) CComboBox
オブジェクトを作成すると、ユーザーがダイアログ ボックスを閉じると、 CComboBox
オブジェクトが自動的に破棄されます。
別のウィンドウ オブジェクト内に CComboBox
オブジェクトを埋め込む場合は、破棄する必要はありません。 スタック上に CComboBox
オブジェクトを作成すると、自動的に破棄されます。 new
関数を使用してヒープ上にCComboBox
オブジェクトを作成する場合は、Windows コンボ ボックスが破棄されたときにオブジェクトに対してdelete
を呼び出して破棄する必要があります。
注 WM_KEYDOWN
および WM_CHAR
メッセージを処理する場合は、コンボ ボックスのエディット ボックス コントロールとリスト ボックス コントロールをサブクラス化し、 CEdit
と CListBox
からクラスを派生させ、それらのメッセージのハンドラーを派生クラスに追加する必要があります。 詳細については、CWnd::SubclassWindow
を参照してください。
継承階層
CComboBox
要件
ヘッダー: afxwin.h
CComboBox::AddString
コンボ ボックスのリスト ボックスに文字列を追加します。
int AddString(LPCTSTR lpszString);
パラメーター
lpszString
追加する null で終わる文字列を指します。
戻り値
戻り値が 0 以上の場合は、リスト ボックス内の文字列に対する 0 から始まるインデックスになります。 エラーが発生した場合、戻り値は CB_ERR
されます。新しい文字列を格納できる領域が不足している場合、戻り値は CB_ERRSPACE
されます。
解説
リスト ボックスが CBS_SORT
スタイルで作成されていない場合は、文字列がリストの末尾に追加されます。 そうでない場合は、文字列がリストに挿入されてから、リストが並べ替えられます。
Note
この関数は、Windows ComboBoxEx
コントロールではサポートされていません。 このコントロールの詳細については、Windows SDK の「 ComboBoxEx
コントロール 」を参照してください。
リスト内の特定の場所に文字列を挿入するには、 InsertString
メンバー関数を使用します。
例
// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
str.Format(_T("item string %d"), i);
m_pComboBox->AddString(str);
}
CComboBox::CComboBox
CComboBox
オブジェクトを構築します。
CComboBox();
例
// Declare a local CComboBox object.
CComboBox myComboBox;
// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;
CComboBox::Clear
コンボ ボックスの編集コントロール内の現在の選択範囲 (ある場合) を削除 (クリア) します。
void Clear();
解説
現在の選択範囲を削除し、削除した内容をクリップボードに配置するには、 Cut
メンバー関数を使用します。
例
// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();
CComboBox::CompareItem
並べ替えられた所有者描画コンボ ボックスのリスト ボックス部分の新しい項目の相対位置を決定するために、フレームワークによって呼び出されます。
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
パラメーター
lpCompareItemStruct
COMPAREITEMSTRUCT
構造体への長いポインター。
戻り値
COMPAREITEMSTRUCT
構造体で説明されている 2 つの項目の相対位置を示します。 次のいずれかの値を指定できます。
値 | 意味 |
---|---|
- 1 | 項目 1 は項目 2 より前に並べ替えられます。 |
0 | 項目 1 と項目 2 は同じように並べ替えられます。 |
1 | 項目 1 は項目 2 の後に並べ替えられます。 |
COMPAREITEMSTRUCT
の説明については、「CWnd::OnCompareItem
」を参照してください。
解説
既定では、このメンバー関数は何も行いません。 LBS_SORT
スタイルの所有者描画コンボ ボックスを作成する場合は、このメンバー関数をオーバーライドして、リスト ボックスに追加された新しい項目をフレームワークが並べ替えるのを支援する必要があります。
例
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
int iComp = 0;
ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
if (NULL != lpszText1 && NULL != lpszText2)
{
iComp = _tcscmp(lpszText2, lpszText1);
}
return iComp;
}
CComboBox::Copy
コンボ ボックスの編集コントロールにある現在の選択範囲をクリップボードに CF_TEXT
形式でコピーします(存在する場合)。
void Copy();
例
// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();
CComboBox::Create
コンボ ボックスを作成し、 CComboBox
オブジェクトにアタッチします。
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
パラメーター
dwStyle
コンボ ボックスのスタイルを指定します。 ボックス スタイルの任意の組み合わせをボックスに適用。
rect
コンボ ボックスの位置とサイズをポイントします。 RECT
構造体またはCRect
オブジェクトを指定できます。
pParentWnd
コンボ ボックスの親ウィンドウ (通常は CDialog
) を指定します。 NULL
することはできません。
nID
コンボ ボックスのコントロール ID を指定します。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
CComboBox
オブジェクトは、2 つの手順で作成します。 まず、コンストラクターを呼び出し、 Create
を呼び出します。これにより、Windows コンボ ボックスが作成され、 CComboBox
オブジェクトにアタッチされます。
Create
実行すると、Windows はWM_NCCREATE
、WM_CREATE
、WM_NCCALCSIZE
、およびWM_GETMINMAXINFO
メッセージをコンボ ボックスに送信します。
これらのメッセージは、既定では、CWnd
基底クラスのOnNcCreate
、OnCreate
、OnNcCalcSize
、およびOnGetMinMaxInfo
メンバー関数によって処理されます。 既定のメッセージ処理を拡張するには、 CComboBox
からクラスを派生させ、新しいクラスにメッセージ マップを追加し、前のメッセージ ハンドラー メンバー関数をオーバーライドします。 たとえば、新しいクラスに必要な初期化を実行するには、 OnCreate
をオーバーライドします。
コンボ ボックス コントロールに次の ウィンドウ スタイル を適用します。 :
WS_CHILD
いつもWS_VISIBLE
通常はWS_DISABLED
稀にWS_VSCROLL
コンボ ボックスのリスト ボックスに垂直スクロールを追加するにはWS_HSCROLL
コンボ ボックスのリスト ボックスに水平スクロールを追加するにはWS_GROUP
コントロールをグループ化するにはWS_TABSTOP
コンボ ボックスをタブの順序に含めるには
例
m_pComboBox->Create(
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
CRect(10, 10, 200, 100), pParentWnd, 1);
CComboBox::Cut
コンボ ボックス編集コントロール内の現在の選択範囲を削除 (切り取り) し、削除したテキストを CF_TEXT
形式でクリップボードにコピーします。
void Cut();
解説
削除されたテキストをクリップボードに配置せずに現在の選択範囲を削除するには、 Clear
メンバー関数を呼び出します。
例
// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();
CComboBox::DeleteItem
ユーザーが所有者描画 CComboBox
オブジェクトから項目を削除するか、コンボ ボックスを破棄するときに、フレームワークによって呼び出されます。
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
パラメーター
lpDeleteItemStruct
削除されたアイテムに関する情報を含む Windows DELETEITEMSTRUCT
構造体への長いポインター。 この構造の説明については、 CWnd::OnDeleteItem
を参照してください。
解説
この関数の既定の実装は、何も行いません。 必要に応じてコンボ ボックスを再描画するには、この関数をオーバーライドします。
例
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
AFXDUMP(lpszText);
}
CComboBox::DeleteString
コンボ ボックスから nIndex
位置にある項目を削除します。
int DeleteString(UINT nIndex);
パラメーター
nIndex
削除する文字列のインデックスを指定します。
戻り値
戻り値が 0 以上の場合、リストに残っている文字列の数になります。 nIndex
がリスト内の項目数より大きいインデックスを指定した場合、戻り値はCB_ERR
されます。
解説
nIndex
に続くすべての項目が 1 つ下の位置に移動するようになりました。 たとえば、コンボ ボックスに 2 つの項目が含まれている場合、最初の項目を削除すると、残りの項目が最初の位置になります。 nIndex
最初の位置にある項目の場合は =0。
例
// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
m_pComboBox->DeleteString(i);
}
CComboBox::Dir
コンボ ボックスのリスト ボックスにファイル名またはドライブのリストを追加します。
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
パラメーター
attr
CFile::GetStatus
で説明されているenum
値の任意の組み合わせ、または次の値の任意の組み合わせを指定できます。
DDL_READWRITE
ファイルの読み取りまたは書き込みが可能です。DDL_READONLY
ファイルは読み取り可能ですが、書き込むには使用できません。DDL_HIDDEN
ファイルは非表示であり、ディレクトリ一覧には表示されません。DDL_SYSTEM
ファイルはシステム ファイルです。DDL_DIRECTORY
lpszWildCard
で指定された名前は、ディレクトリを指定します。DDL_ARCHIVE
ファイルがアーカイブされました。DDL_DRIVES
lpszWildCard
で指定された名前に一致するすべてのドライブを含めます。DDL_EXCLUSIVE
排他フラグ。 排他フラグが設定されている場合は、指定した種類のファイルのみが一覧表示されます。 それ以外の場合は、指定した種類のファイルが、"標準" ファイルに加えて一覧表示されます。
lpszWildCard
ファイル指定文字列を指します。 文字列にはワイルドカード ( *.*
など) を含めることができます。
戻り値
戻り値が 0 以上の場合は、リストに最後に追加されたファイル名の 0 から始まるインデックスになります。 エラーが発生した場合、戻り値は CB_ERR
されます。新しい文字列を格納できる領域が不足している場合、戻り値は CB_ERRSPACE
。
解説
この関数は、Windows ComboBoxEx
コントロールではサポートされていません。 このコントロールの詳細については、Windows SDK の「 ComboBoxEx
コントロール 」を参照してください。
例
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);
CComboBox::DrawItem
所有者描画コンボ ボックスの視覚的な側面が変更されたときにフレームワークによって呼び出されます。
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
パラメーター
lpDrawItemStruct
必要な描画の種類に関する情報を含む DRAWITEMSTRUCT
構造体へのポインター。
解説
DRAWITEMSTRUCT
構造体のitemAction
メンバーは、実行する描画アクションを定義します。 この構造の説明については、 CWnd::OnDrawItem
を参照してください。
既定では、このメンバー関数は何も行いません。 このメンバー関数をオーバーライドして、所有者描画 CComboBox
オブジェクトの描画を実装します。 このメンバー関数が終了する前に、アプリケーションは、 lpDrawItemStruct
で指定された表示コンテキストに対して選択されたすべてのグラフィックス デバイス インターフェイス (GDI) オブジェクトを復元する必要があります。
例
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Erase
// the rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CComboBox::FindString
コンボ ボックスのリスト ボックスで、指定したプレフィックスを含む最初の文字列を検索しますが、選択しません。
int FindString(
int nStartAfter,
LPCTSTR lpszString) const;
パラメーター
nStartAfter
検索する最初の項目の前にある項目の 0 から始まるインデックスを格納します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から、 nStartAfter
で指定されたアイテムに戻ります。 -1 の場合、リスト ボックス全体が最初から検索されます。
lpszString
検索するプレフィックスを含む null で終わる文字列を指します。 検索では大文字と小文字が区別されないため、この文字列には大文字と小文字の任意の組み合わせを含めることができます。
戻り値
戻り値が 0 以上の場合は、一致する項目の 0 から始まるインデックスになります。 検索が失敗した場合は CB_ERR
。
解説
この関数は、Windows ComboBoxEx
コントロールではサポートされていません。 このコントロールの詳細については、Windows SDK の「 ComboBoxEx
コントロール 」を参照してください。
例
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
m_pComboBox->DeleteString(nItem);
}
CComboBox::FindStringExact
FindStringExact
メンバー関数を呼び出して、lpszFind
で指定された文字列と一致する最初のリスト ボックス文字列 (コンボ ボックス内) を検索します。
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
パラメーター
nIndexStart
検索する最初の項目の前にある項目の 0 から始まるインデックスを指定します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から、 nIndexStart
で指定されたアイテムに戻ります。 nIndexStart
が -1 の場合、リスト ボックス全体が最初から検索されます。
lpszFind
検索する null で終わる文字列を指します。 この文字列には、拡張子を含む完全なファイル名を含めることができます。 検索では大文字と小文字が区別されないため、この文字列には大文字と小文字の任意の組み合わせを含めることができます。
戻り値
一致する項目の 0 から始まるインデックス。検索が失敗した場合は CB_ERR
。
解説
コンボ ボックスが所有者描画スタイルで作成されたが、 CBS_HASSTRINGS
スタイルがない場合、 FindStringExact
は doubleword 値を lpszFind の値と照合しようとします。
例
// The string to match.
LPCTSTR lpszmyExactString = _T("item 5");
// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
m_pComboBox->DeleteString(nDex);
}
CComboBox::GetComboBoxInfo
CComboBox
オブジェクトの情報を取得します。
BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;
パラメーター
*pcbi*<br/> A pointer to the [
COMBOBOXINFO'](/windows/win32/api/winuser/ns-winuser-comboboxinfo) 構造体。
戻り値
正常に終了した場合は、TRUE
を返します。それ以外の場合は、FALSE
を返します。
解説
このメンバー関数は、Windows SDK で説明されているように、 CB_GETCOMBOBOXINFO
メッセージの機能をエミュレートします。
CComboBox::GetCount
コンボ ボックスのリスト ボックス部分の項目数を取得するには、このメンバー関数を呼び出します。
int GetCount() const;
戻り値
項目数。 返されるカウントは、最後の項目のインデックス値より 1 大きい値です (インデックスは 0 から始まります)。 エラーが発生した場合は CB_ERR
。
例
// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
strItem.Format(_T("item %d"), i);
m_pComboBox->AddString(strItem);
}
// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);
CComboBox::GetCueBanner
コンボ ボックス コントロールに表示されるキュー テキストを取得します。
CString GetCueBanner() const;
BOOL GetCueBanner(
LPTSTR lpszText,
int cchText) const;
パラメーター
lpszText
[out]キュー バナー テキストを受け取るバッファーへのポインター。
cchText
[in] lpszText
パラメーターが指すバッファーのサイズ。
戻り値
最初のオーバーロードでは、キュー バナー テキストが存在する場合はそのテキストを含む CString
オブジェクト。それ以外の場合は、長さが 0 の CString
オブジェクトです。
または
2 番目のオーバーロードでは、このメソッドが成功した場合は TRUE
。それ以外の場合は FALSE
。
解説
キュー テキストは、コンボ ボックス コントロールの入力領域に表示されるプロンプトです。 キュー テキストは、ユーザーが入力するまで表示されます。
このメソッドは、Windows SDK で説明されている CB_GETCUEBANNER
メッセージを送信します。
CComboBox::GetCurSel
このメンバー関数を呼び出して、コンボ ボックスのどの項目が選択されているかを判断します。
int GetCurSel() const;
戻り値
コンボ ボックスのリスト ボックスで現在選択されている項目の 0 から始まるインデックス。項目が選択されていない場合は CB_ERR
。
解説
GetCurSel
は、インデックスをリストに返します。
例
// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_pComboBox->SetCurSel(nIndex);
else
m_pComboBox->SetCurSel(0);
}
CComboBox::GetDroppedControlRect
GetDroppedControlRect
メンバー関数を呼び出して、ドロップダウン コンボ ボックスの表示 (ドロップダウン) リスト ボックスの画面座標を取得します。
void GetDroppedControlRect(LPRECT lprect) const;
パラメーター
lprect
座標を受け取る RECT 構造体 をポイントします。
例
// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.
// The point to move the combo box to.
CPoint myPoint(30, 10);
CRect r;
m_pComboBox->GetDroppedControlRect(&r);
m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);
CComboBox::GetDroppedState
GetDroppedState
メンバー関数を呼び出して、ドロップダウン コンボ ボックスのリスト ボックスが表示 (ドロップ ダウン) されているかどうかを確認します。
BOOL GetDroppedState() const;
戻り値
リスト ボックスが表示されている場合は 0 以外。それ以外の場合は 0。
例
// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
m_pComboBox->ShowDropDown(TRUE);
CComboBox::GetDroppedWidth
コンボ ボックスのリスト ボックスの最小許容幅 (ピクセル単位) を取得するには、この関数を呼び出します。
int GetDroppedWidth() const;
戻り値
成功した場合、最小許容幅 (ピクセル単位)。それ以外の場合は CB_ERR
。
解説
この関数は、 CBS_DROPDOWN
または CBS_DROPDOWNLIST
スタイルのコンボ ボックスにのみ適用されます。
既定では、ドロップダウン リスト ボックスの最小許容幅は 0 です。 最小許容幅は、 SetDroppedWidth
を呼び出すことによって設定できます。 コンボ ボックスのリスト ボックス部分が表示されている場合、その幅は、許容される最小幅またはコンボ ボックスの幅の大きくなります。
例
SetDroppedWidth
の例を参照してください。
CComboBox::GetEditSel
コンボ ボックスのエディット コントロール内の現在の選択範囲の先頭と最後の文字の位置を取得します。
DWORD GetEditSel() const;
戻り値
下位ワードの開始位置と、上位ワードの選択範囲の終了後の最初の非選択文字の位置を含む 32 ビット値。 エディット コントロールのないコンボ ボックスでこの関数を使用すると、 CB_ERR
が返されます。
例
DWORD dwSel;
// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}
CComboBox::GetExtendedUI
GetExtendedUI
メンバー関数を呼び出して、コンボ ボックスに既定のユーザー インターフェイスと拡張ユーザー インターフェイスのどちらが含まれているかを判断します。
BOOL GetExtendedUI() const;
戻り値
コンボ ボックスに拡張ユーザー インターフェイスがある場合は 0 以外。それ以外の場合は 0。
解説
拡張ユーザー インターフェイスは、次の方法で識別できます。
静的コントロールをクリックすると、
CBS_DROPDOWNLIST
スタイルのコンボ ボックスのリスト ボックスのみが表示されます。↓キーを押すと、リスト ボックスが表示されます (F4 は無効です)。
項目リストが表示されていない場合 (方向キーが無効になっている場合) は、静的コントロール内のスクロールは無効になります。
例
// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
m_pComboBox->SetExtendedUI(TRUE);
CComboBox::GetHorizontalExtent
コンボ ボックスのリスト ボックス部分を水平方向にスクロールできる幅 (ピクセル単位) をコンボ ボックスから取得します。
UINT GetHorizontalExtent() const;
戻り値
コンボ ボックスのリスト ボックス部分のスクロール可能な幅 (ピクセル単位)。
解説
これは、コンボ ボックスのリスト ボックス部分に水平スクロール バーがある場合にのみ適用されます。
例
// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strText);
sz = pDCCombo->GetTextExtent(strText);
if (sz.cx > (LONG)dxText)
dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);
// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
m_pComboBox->SetHorizontalExtent(dxText);
ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}
CComboBox::GetItemData
指定したコンボ ボックス項目に関連付けられているアプリケーション指定の 32 ビット値を取得します。
DWORD_PTR GetItemData(int nIndex) const;
パラメーター
nIndex
コンボ ボックスのリスト ボックス内の項目の 0 から始まるインデックスを格納します。
戻り値
項目に関連付けられた 32 ビット値。エラーが発生した場合に CB_ERR
。
解説
32 ビット値は、SetItemData
メンバー関数呼び出しの dwItemData
パラメーターで設定できます。 取得する 32 ビット値がポインター (void
*) の場合は、GetItemDataPtr
メンバー関数を使用します。
例
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemData(i) == 0)
{
m_pComboBox->SetItemData(i, (DWORD)-1);
}
}
CComboBox::GetItemDataPtr
指定したコンボ ボックス項目に関連付けられているアプリケーション指定の 32 ビット値をポインター (void
*) として取得します。
void* GetItemDataPtr(int nIndex) const;
パラメーター
nIndex
コンボ ボックスのリスト ボックス内の項目の 0 から始まるインデックスを格納します。
戻り値
ポインターを取得します。エラーが発生した場合は -1 を取得します。
例
LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);
// Check all the items in the combo box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemDataPtr(i) == lpmyPtr)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
}
CComboBox::GetItemHeight
GetItemHeight
メンバー関数を呼び出して、コンボ ボックス内のリスト 項目の高さを取得します。
int GetItemHeight(int nIndex) const;
パラメーター
nIndex
高さを取得するコンボ ボックスのコンポーネントを指定します。 nIndex
パラメーターが -1 の場合、コンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さが取得されます。 コンボ ボックスに CBS_OWNERDRAWVARIABLE
スタイルがある場合、 nIndex
は、高さを取得するリスト アイテムの 0 から始まるインデックスを指定します。 それ以外の場合は、 nIndex
を 0 に設定する必要があります。
戻り値
コンボ ボックス内の指定した項目の高さ (ピクセル単位)。 エラーが発生した場合、戻り値は CB_ERR
。
例
// Set the height of every item so the item
// is completely visible.
CString strLBText;
CSize size;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strLBText);
size = pDC->GetTextExtent(strLBText);
// Only want to set the item height if the current height
// is not big enough.
if (m_pComboBox->GetItemHeight(i) < size.cy)
m_pComboBox->SetItemHeight(i, size.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::GetLBText
コンボ ボックスのリスト ボックスから文字列を取得します。
int GetLBText(
int nIndex,
LPTSTR lpszText) const;
void GetLBText(
int nIndex,
CString& rString) const;
パラメーター
nIndex
コピーするリスト ボックス文字列の 0 から始まるインデックスを格納します。
lpszText
文字列を受け取るバッファーを指します。 バッファーには、文字列と終端の null 文字に対して十分な領域が必要です。
rString
CString
への参照。
戻り値
終端の null 文字を除く、文字列の長さ (バイト単位)。 nIndex
が有効なインデックスを指定しない場合、戻り値はCB_ERR
。
解説
このメンバー関数の 2 番目の形式は、 CString
オブジェクトに項目のテキストを入力します。
nIndex
が無効な場合、この関数はE_INVALIDARG
例外 (エラー コード: -2147024809
、0x80070057
) をスローします。
例
// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
n = m_pComboBox->GetLBTextLen(i);
m_pComboBox->GetLBText(i, str1.GetBuffer(n));
str1.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str1.GetBuffer(0));
AFXDUMP(str2);
}
CComboBox::GetLBTextLen
コンボ ボックスのリスト ボックス内の文字列の長さを取得します。
int GetLBTextLen(int nIndex) const;
パラメーター
nIndex
リスト ボックス文字列の 0 から始まるインデックスを格納します。
戻り値
終端の null 文字を除く、文字列の長さ (バイト単位)。 nIndex
が有効なインデックスを指定しない場合、戻り値はCB_ERR
。
例
CComboBox::GetLBText
の例を参照してください。
CComboBox::GetLocale
コンボ ボックスで使用されるロケールを取得します。
LCID GetLocale() const;
戻り値
コンボ ボックス内の文字列のロケール識別子 (LCID) 値。
解説
たとえば、ロケールは、並べ替えられたコンボ ボックス内の文字列の並べ替え順序を決定するために使用されます。
例
CComboBox::SetLocale
の例を参照してください。
CComboBox::GetMinVisible
現在のコンボ ボックス コントロールのドロップダウン リストに表示される項目の最小数を取得します。
int GetMinVisible() const;
戻り値
現在のドロップダウン リストに表示されている項目の最小数。
解説
このメソッドは、Windows SDK で説明されている CB_GETMINVISIBLE
メッセージを送信します。
CComboBox::GetTopIndex
コンボ ボックスのリスト ボックス部分の最初に表示される項目の 0 から始まるインデックスを取得します。
int GetTopIndex() const;
戻り値
コンボ ボックスのリスト ボックス部分に表示される最初の項目の 0 から始まるインデックス (成功した場合)、それ以外の場合 CB_ERR
。
解説
最初は、項目 0 はリスト ボックスの上部にありますが、リスト ボックスがスクロールされている場合は、別の項目が一番上にある可能性があります。
例
// Want an item in the bottom half to be the first visible item.
int nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
m_pComboBox->SetTopIndex(nTop);
ASSERT(m_pComboBox->GetTopIndex() == nTop);
}
CComboBox::InitStorage
コンボ ボックスのリスト ボックス部分にリスト ボックス項目を格納するためのメモリを割り当てます。
int InitStorage(
int nItems,
UINT nBytes);
パラメーター
nItems
追加する項目の数を指定します。
nBytes
項目文字列に割り当てるメモリの量をバイト単位で指定します。
戻り値
成功した場合、コンボ ボックスのリスト ボックス部分でメモリの再割り当てが必要になるまでに格納できる項目の最大数。それ以外の場合は CB_ERRSPACE
、十分なメモリが使用できません。
解説
CComboBox
のリスト ボックス部分に多数の項目を追加する前に、この関数を呼び出します。
Windows 95/98 のみ: wParam
パラメーターは 16 ビット値に制限されています。 つまり、リスト ボックスには 32,767 個を超えるアイテムを含めることはできません。 項目の数は制限されていますが、リスト ボックス内の項目の合計サイズは、使用可能なメモリによってのみ制限されます。
この関数は、多数の項目 (100 個を超える) を含むリスト ボックスの初期化を高速化するのに役立ちます。 指定したメモリ量を事前に割り当て、後続の AddString
、 InsertString
、および Dir
関数が可能な限り短い時間を要するようにします。 パラメーターには見積もりを使用できます。 過大評価すると、追加のメモリが割り当てられます。過小評価する場合は、事前に割り当てられた金額を超えるアイテムに対して通常の割り当てが使用されます。
例
// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);
// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
strAdd.Format(_T("item string %d"), i);
m_pComboBox->AddString(strAdd);
}
CComboBox::InsertString
コンボ ボックスのリスト ボックスに文字列を挿入します。
int InsertString(
int nIndex,
LPCTSTR lpszString);
パラメーター
nIndex
文字列を受け取るリスト ボックス内の位置を示す 0 から始まるインデックスです。 このパラメーターが -1 の場合、文字列はリストの末尾に追加されます。
lpszString
挿入される null で終わる文字列を指します。
戻り値
文字列が挿入された位置の 0 から始まるインデックス。 エラーが発生した場合、戻り値は CB_ERR
。 戻り値は、新しい文字列を格納するために十分な領域が使用できない場合に CB_ERRSPACE
されます。
解説
AddString
メンバー関数とは異なり、InsertString
メンバー関数では、CBS_SORT
スタイルのリストは並べ替えされません。
Note
この関数は、Windows ComboBoxEx
コントロールではサポートされていません。 このコントロールの詳細については、Windows SDK の「 ComboBoxEx
コントロール 」を参照してください。
例
// Insert items in between existing items.
CString strIns;
int nItems = m_pComboBox->GetCount();
for (int i = 0; i < nItems; i++)
{
strIns.Format(_T("item string %c"), (char)('A' + i));
m_pComboBox->InsertString(2 * i, strIns);
}
CComboBox::LimitText
ユーザーがコンボ ボックスの編集コントロールに入力できるテキストの長さをバイト単位で制限します。
BOOL LimitText(int nMaxChars);
パラメーター
nMaxChars
ユーザーが入力できるテキストの長さ (バイト単位) を指定します。 このパラメーターが 0 の場合、テキストの長さは 65,535 バイトに設定されます。
戻り値
成功した場合は 0 以外。 スタイルが CBS_DROPDOWNLIST
コンボ ボックスまたはエディット コントロールのないコンボ ボックスに対して呼び出された場合、戻り値は CB_ERR
。
解説
コンボ ボックスにスタイル CBS_AUTOHSCROLL
がない場合、テキスト制限を編集コントロールのサイズより大きく設定しても効果はありません。
LimitText
は、ユーザーが入力できるテキストのみを制限します。 メッセージの送信時に編集コントロールに既に存在するテキストには影響しません。また、リスト ボックス内の文字列が選択されている場合に、編集コントロールにコピーされたテキストの長さにも影響しません。
例
// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.
// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);
CRect rect;
m_pComboBox->GetClientRect(&rect);
m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);
CComboBox::MeasureItem
所有者描画スタイルのコンボ ボックスが作成されるときに、フレームワークによって呼び出されます。
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
パラメーター
lpMeasureItemStruct
MEASUREITEMSTRUCT
構造体への長いポインター。
解説
既定では、このメンバー関数は何も行いません。 このメンバー関数をオーバーライドし、 MEASUREITEMSTRUCT
構造体を入力して、コンボ ボックスのリスト ボックスのディメンションを Windows に通知します。 コンボ ボックスが CBS_OWNERDRAWVARIABLE
スタイルで作成された場合、フレームワークはリスト ボックス内の各項目に対してこのメンバー関数を呼び出します。 それ以外の場合、このメンバーは 1 回だけ呼び出されます。
CWnd
のSubclassDlgItem
メンバー関数で作成された所有者描画コンボ ボックスでCBS_OWNERDRAWFIXED
スタイルを使用するには、プログラミング上の考慮事項がさらに必要です。 テクニカル ノート 14 の説明を参照してください。
MEASUREITEMSTRUCT
構造の説明については、CWnd::OnMeasureItem
を参照してください。
例
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);
if (lpMeasureItemStruct->itemID != (UINT)-1)
{
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
}
CComboBox::Paste
クリップボードのデータを、現在のカーソル位置にあるコンボ ボックスの編集コントロールに挿入します。
void Paste();
解説
データは、クリップボードに CF_TEXT
形式のデータが含まれている場合にのみ挿入されます。
例
// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();
CComboBox::ResetContent
コンボ ボックスのリスト ボックスと編集コントロールからすべての項目を削除します。
void ResetContent();
例
// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);
CComboBox::SelectString
コンボ ボックスのリスト ボックスで文字列を検索し、文字列が見つかった場合は、リスト ボックス内の文字列を選択して編集コントロールにコピーします。
int SelectString(
int nStartAfter,
LPCTSTR lpszString);
パラメーター
nStartAfter
検索する最初の項目の前にある項目の 0 から始まるインデックスを格納します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から、 nStartAfter
で指定されたアイテムに戻ります。 -1 の場合、リスト ボックス全体が最初から検索されます。
lpszString
検索するプレフィックスを含む null で終わる文字列を指します。 検索では大文字と小文字が区別されないため、この文字列には大文字と小文字の任意の組み合わせを含めることができます。
戻り値
文字列が見つかった場合に選択した項目の 0 から始まるインデックス。 検索が失敗した場合、戻り値は CB_ERR
され、現在の選択範囲は変更されません。
解説
文字列は、最初の文字 (開始点) がプレフィックス文字列の文字と一致する場合にのみ選択されます。
SelectString
メンバー関数とFindString
メンバー関数はどちらも文字列を検索しますが、SelectString
メンバー関数も文字列を選択します。
例
// The string to match.
LPCTSTR lpszSelect = _T("item");
// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);
CComboBox::SetCueBanner
コンボ ボックス コントロールに表示されるキュー テキストを設定します。
BOOL SetCueBanner(LPCTSTR lpszText);
パラメーター
lpszText
[in]キュー テキストを含む null で終わるバッファーへのポインター。
戻り値
このメソッドが成功した場合は TRUE
。それ以外の場合は FALSE
。
解説
キュー テキストは、コンボ ボックス コントロールの入力領域に表示されるプロンプトです。 キュー テキストは、ユーザーが入力するまで表示されます。
このメソッドは、Windows SDK で説明されている CB_SETCUEBANNER
メッセージを送信します。
例
最初のコード例では、コンボ ボックス コントロールにプログラムでアクセスするために使用される変数 ( m_combobox
) を定義します。 この変数は次の例で使用されています。
// Variable to access the combo box control
CComboBox m_combobox;
次のコード例では、コンボ ボックス コントロールのキュー バナーを設定します。
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetCurSel
コンボ ボックスのリスト ボックスで文字列を選択します。
int SetCurSel(int nSelect);
パラメーター
nSelect
選択する文字列の 0 から始まるインデックスを指定します。 -1 の場合、リスト ボックス内の現在の選択範囲は削除され、編集コントロールはクリアされます。
戻り値
メッセージが成功した場合に選択された項目の 0 から始まるインデックス。 戻り値は、nSelect
がリスト内の項目数より大きい場合、またはnSelect
が -1 に設定されている場合にCB_ERR
され、選択範囲がクリアされます。
解説
必要に応じて、リスト ボックスは文字列をスクロールして表示します (リスト ボックスが表示されている場合)。 コンボ ボックスの編集コントロール内のテキストが、新しい選択内容を反映するように変更されます。 リスト ボックス内の以前の選択は削除されます。
例
// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
m_pComboBox->SetCurSel(nLast);
CComboBox::SetDroppedWidth
コンボ ボックスのリスト ボックスの最小許容幅をピクセル単位で設定するには、この関数を呼び出します。
int SetDroppedWidth(UINT nWidth);
パラメーター
nWidth
コンボ ボックスのリスト ボックス部分の最小許容幅 (ピクセル単位)。
戻り値
成功した場合は、リスト ボックスの新しい幅。それ以外の場合は CB_ERR
。
解説
この関数は、 CBS_DROPDOWN
または CBS_DROPDOWNLIST
スタイルのコンボ ボックスにのみ適用されます。
既定では、ドロップダウン リスト ボックスの最小許容幅は 0 です。 コンボ ボックスのリスト ボックス部分が表示されている場合、その幅は、許容される最小幅またはコンボ ボックスの幅の大きくなります。
例
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);
// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);
CComboBox::SetEditSel
コンボ ボックスの編集コントロールで文字を選択します。
BOOL SetEditSel(
int nStartChar,
int nEndChar);
パラメーター
nStartChar
開始位置を指定します。 開始位置が -1 に設定されている場合、既存の選択範囲はすべて削除されます。
nEndChar
終了位置を指定します。 終了位置を -1 に設定すると、エディット コントロールの開始位置から最後の文字までのすべてのテキストが選択されます。
戻り値
メンバー関数が成功した場合は 0 以外。それ以外の場合は 0。 CComboBox
がCBS_DROPDOWNLIST
スタイルを持っているか、リスト ボックスがない場合にCB_ERR
されます。
解説
位置はゼロから始まります。 編集コントロールの最初の文字を選択するには、開始位置として 0 を指定します。 終了位置は、最後の文字の直後の文字を選択するための位置です。 たとえば、編集コントロールの最初の 4 文字を選択するには、開始位置 0 と終了位置 4 を使用します。
Note
この関数は、Windows ComboBoxEx
コントロールではサポートされていません。 このコントロールの詳細については、Windows SDK の「 ComboBoxEx
コントロール 」を参照してください。
例
CComboBox::GetEditSel
の例を参照してください。
CComboBox::SetExtendedUI
SetExtendedUI
メンバー関数を呼び出して、既定のユーザー インターフェイスまたはCBS_DROPDOWN
またはCBS_DROPDOWNLIST
スタイルを持つコンボ ボックスの拡張ユーザー インターフェイスを選択します。
int SetExtendedUI(BOOL bExtended = TRUE);
パラメーター
bExtended
コンボ ボックスで拡張ユーザー インターフェイスを使用するか、既定のユーザー インターフェイスを使用するかを指定します。 TRUE
値を指定すると、拡張ユーザー インターフェイスが選択され、FALSE
の値によって標準のユーザー インターフェイスが選択されます。
戻り値
CB_OKAY
操作が成功した場合は。エラーが発生した場合は CB_ERR
。
解説
拡張ユーザー インターフェイスは、次の方法で識別できます。
静的コントロールをクリックすると、
CBS_DROPDOWNLIST
スタイルのコンボ ボックスのリスト ボックスのみが表示されます。↓キーを押すと、リスト ボックスが表示されます (F4 は無効です)。
項目リストが表示されていない場合 (方向キーが無効になっている場合) は、静的コントロール内のスクロールは無効になります。
例
CComboBox::GetExtendedUI
の例を参照してください。
CComboBox::SetHorizontalExtent
コンボ ボックスのリスト ボックス部分を水平方向にスクロールできる幅をピクセル単位で設定します。
void SetHorizontalExtent(UINT nExtent);
パラメーター
nExtent
コンボ ボックスのリスト ボックス部分を水平方向にスクロールできるピクセル数を指定します。
解説
リスト ボックスの幅がこの値より小さい場合、水平スクロール バーはリスト ボックス内の項目を水平方向にスクロールします。 リスト ボックスの幅がこの値以上の場合、水平スクロール バーは非表示になります。コンボ ボックスのスタイルが CBS_DISABLENOSCROLL
の場合は無効になります。
例
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings can
// be scrolled to.
m_pComboBox->SetHorizontalExtent(dx);
CComboBox::SetItemData
コンボ ボックス内の指定した項目に関連付けられた 32 ビット値を設定します。
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
パラメーター
nIndex
設定する項目の 0 から始まるインデックスが含まれます。
dwItemData
項目に関連付ける新しい値を格納します。
戻り値
CB_ERR
エラーが発生した場合は 。
解説
32 ビット項目をポインターにする場合は、 SetItemDataPtr
メンバー関数を使用します。
例
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemData(i, i);
}
CComboBox::SetItemDataPtr
コンボ ボックス内の指定した項目に関連付けられた 32 ビット値を、指定したポインター (void
*) に設定します。
int SetItemDataPtr(
int nIndex,
void* pData);
パラメーター
nIndex
項目に対する 0 から始まるインデックスが含まれます。
pData
項目に関連付けるポインターを格納します。
戻り値
CB_ERR
エラーが発生した場合は 。
解説
このポインターは、コンボ ボックス内の項目の相対位置が項目の追加または削除時に変更される可能性がある場合でも、コンボ ボックスの有効期間中は有効なままです。 そのため、ボックス内の項目のインデックスは変更される可能性がありますが、ポインターは信頼できるままです。
例
// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
CComboBox::SetItemHeight
SetItemHeight
メンバー関数を呼び出して、コンボ ボックス内のリスト アイテムの高さ、またはコンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さを設定します。
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
パラメーター
nIndex
リスト 項目の高さ、またはコンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さを設定するかどうかを指定します。
コンボ ボックスに CBS_OWNERDRAWVARIABLE
スタイルがある場合、 nIndex
は、高さを設定するリスト アイテムの 0 から始まるインデックスを指定します。それ以外の場合は、 nIndex
0 を指定し、すべてのリスト アイテムの高さが設定されます。
nIndex
が -1 の場合、コンボ ボックスのエディット コントロールまたは静的テキスト部分の高さが設定されます。
cyItemHeight
nIndex
で識別されるコンボ ボックス コンポーネントの高さをピクセル単位で指定します。
戻り値
CB_ERR
インデックスまたは高さが無効な場合。それ以外の場合は 0。
解説
コンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さは、リスト アイテムの高さとは無関係に設定されます。 アプリケーションでは、エディット コントロール (または静的テキスト) 部分の高さが、特定のリスト ボックス項目の高さよりも小さいことを確認する必要があります。
例
// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::SetLocale
このコンボ ボックスのロケール識別子を設定します。
LCID SetLocale(LCID nNewLocale);
パラメーター
nNewLocale
コンボ ボックスに設定する新しいロケール識別子 (LCID) 値。
戻り値
このコンボ ボックスの前のロケール識別子 (LCID) の値。
解説
SetLocale
が呼び出されない場合は、システムから既定のロケールが取得されます。 このシステムの既定のロケールは、コントロール パネルの地域 (または国際) アプリケーションを使用して変更できます。
例
// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
SORT_DEFAULT);
// Force the list box to use my locale.
m_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);
CComboBox::SetMinVisibleItems
現在のコンボ ボックス コントロールのドロップダウン リストに表示される項目の最小数を設定します。
BOOL SetMinVisibleItems(int iMinVisible);
パラメーター
iMinVisible
[in]表示される項目の最小数を指定します。
戻り値
TRUE
このメソッドが成功した場合。それ以外の場合は FALSE
。
解説
このメソッドは、Windows SDK で説明されている CB_SETMINVISIBLE
メッセージを送信します。
例
最初のコード例では、コンボ ボックス コントロールにプログラムでアクセスするために使用される変数 ( m_combobox
) を定義します。 この変数は次の例で使用されています。
// Variable to access the combo box control
CComboBox m_combobox;
次のコード例では、コンボ ボックス コントロールのドロップダウン リストに 20 個の項目を挿入します。 次に、ユーザーがドロップダウン矢印を押したときに、少なくとも 10 個の項目を表示することを指定します。
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetTopIndex
コンボ ボックスのリスト ボックス部分に特定の項目が表示されるようにします。
int SetTopIndex(int nIndex);
パラメーター
nIndex
リスト ボックス項目の 0 から始まるインデックスを指定します。
戻り値
成功した場合は 0、エラーが発生した場合は CB_ERR
。
解説
リスト ボックスの上部に nIndex
指定された項目が表示されるか、最大スクロール範囲に達するまで、リスト ボックスがスクロールされます。
例
// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);
CComboBox::ShowDropDown
CBS_DROPDOWN
またはCBS_DROPDOWNLIST
スタイルを持つコンボ ボックスのリスト ボックスを表示または非表示にします。
void ShowDropDown(BOOL bShowIt = TRUE);
パラメーター
bShowIt
ドロップダウン リスト ボックスを表示するか非表示にするかを指定します。 TRUE
の値はリスト ボックスを示します。 FALSE
値を指定すると、リスト ボックスは非表示になります。
解説
既定では、このスタイルのコンボ ボックスにリスト ボックスが表示されます。
このメンバー関数は、 CBS_SIMPLE
スタイルで作成されたコンボ ボックスには影響しません。
例
CComboBox::GetDroppedState
の例を参照してください。
関連項目
MFC サンプル CTRLBARS
CWnd
クラス
階層図
CWnd
クラス
CButton
クラス
CEdit
クラス
CListBox
クラス
CScrollBar
クラス
CStatic
クラス
CDialog
クラス