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 メッセージを処理する場合は、コンボ ボックスのエディット ボックス コントロールとリスト ボックス コントロールをサブクラス化し、 CEditCListBoxからクラスを派生させ、それらのメッセージのハンドラーを派生クラスに追加する必要があります。 詳細については、CWnd::SubclassWindowを参照してください。

継承階層

CObject

CCmdTarget

CWnd

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 つの項目の相対位置を示します。 次のいずれかの値を指定できます。

Value 意味
- 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_NCCREATEWM_CREATEWM_NCCALCSIZE、およびWM_GETMINMAXINFOメッセージをコンボ ボックスに送信します。

これらのメッセージは、既定では、CWnd 基底クラスのOnNcCreateOnCreateOnNcCalcSize、および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_DIRECTORYlpszWildCardで指定された名前は、ディレクトリを指定します。

  • DDL_ARCHIVE ファイルがアーカイブされました。

  • DDL_DRIVESlpszWildCardで指定された名前に一致するすべてのドライブを含めます。

  • 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例外 (エラー コード: -21470248090x80070057) をスローします。

// 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 個を超える) を含むリスト ボックスの初期化を高速化するのに役立ちます。 指定したメモリ量を事前に割り当て、後続の AddStringInsertString、および 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 回だけ呼び出されます。

CWndSubclassDlgItem メンバー関数で作成された所有者描画コンボ ボックスで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。 CComboBoxCBS_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 クラス