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_DROPDOWNCBS_DROPDOWNLISTの既定のユーザー インターフェイスまたは拡張ユーザー インターフェイスを選択します。
CComboBox::SetHorizontalExtent コンボ ボックスのリスト ボックス部分を水平方向にスクロールできる幅をピクセル単位で設定します。
CComboBox::SetItemData コンボ ボックス内の指定した項目に関連付けられた 32 ビット値を設定します。
CComboBox::SetItemDataPtr コンボ ボックス内の指定した項目に関連付けられた 32 ビット ポインターを設定します。
CComboBox::SetItemHeight コンボ ボックス内のリスト 項目の高さ、またはコンボ ボックスのエディット コントロール (または静的テキスト) 部分の高さを設定します。
CComboBox::SetLocale コンボ ボックスのロケール識別子を設定します。
CComboBox::SetMinVisibleItems 現在のコンボ ボックスのドロップダウン リストに表示される項目の最小数を設定します。
CComboBox::SetTopIndex コンボ ボックスのリスト ボックス部分に、指定したインデックスを持つ項目を上部に表示するように指示します。
CComboBox::ShowDropDown またはスタイルを持つ CBS_DROPDOWN コンボ ボックスのリスト ボックスを表示または CBS_DROPDOWNLIST 非表示にします。

解説

コンボ ボックスは、リスト ボックスと静的コントロールまたは編集コントロールの組み合わせで構成されます。 コントロールのリスト ボックス部分は、常に表示される場合もあれば、ユーザーがコントロールの横にあるドロップダウン矢印を選択した場合にのみドロップダウンすることもできます。

リスト ボックスで現在選択されている項目 (存在する場合) は、静的コントロールまたは編集コントロールに表示されます。 さらに、コンボ ボックスにドロップダウン リスト スタイルがある場合、ユーザーはリスト内のいずれかの項目の最初の文字を入力できます。リスト ボックスが表示されている場合は、その最初の文字で次の項目が強調表示されます。

次の表は、3 つのコンボ ボックス スタイルを比較しています

スタイル リスト ボックスが表示されるタイミング 静的コントロールまたは編集コントロール
シンプル 常時 編集
ドロップダウン ドロップダウン時 編集
ドロップダウン リスト ドロップダウン時 スタティック

オブジェクトは 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_DROPDOWNLISTスタイルが設定されたCBS_DROPDOWNコンボ ボックスの場合、1 回のクリックでリスト ボックスが非表示になるため、ダブルクリックを実行できません。

  • ON_CBN_DROPDOWN コンボ ボックスのリスト ボックスがドロップダウンに表示されます (表示されます)。 この通知メッセージは、またはCBS_DROPDOWNLISTスタイルを持つCBS_DROPDOWNコンボ ボックスに対してのみ発生します。

  • 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_CLOSEUPでも、(スタイルが設定されたコンボ ボックスの場合と同様に) 通知メッセージまたはCBN_SELENDOK通知メッセージがCBS_SIMPLE送信されます。

  • ON_CBN_SELENDOK ユーザーが項目を選択し、Enter キーを押すか、下方向キーをクリックしてコンボ ボックスのリスト ボックスを非表示にします。 この通知メッセージは、ユーザーの選択が CBN_CLOSEUP 有効と見なされることを示すメッセージの前に送信されます。 CBN_SELENDCANCEL通知メッセージが送信されない場合CBN_CLOSEUPでも、(スタイルが設定されたコンボ ボックスの場合と同様に) 通知メッセージまたはCBN_SELENDOK通知メッセージがCBS_SIMPLE送信されます。

  • ON_CBN_KILLFOCUS コンボ ボックスが入力フォーカスを失います。

  • ON_CBN_SELCHANGE コンボ ボックスのリスト ボックスでの選択は、ユーザーがリスト ボックス内をクリックするか、方向キーを使用して選択範囲を変更した結果として変更されようとしています。 このメッセージを処理する場合、コンボ ボックスの編集コントロール内のテキストは、他の同様の関数を介してのみ GetLBText 取得できます。 GetWindowText は使用できません。

  • ON_CBN_SETFOCUS コンボ ボックスは入力フォーカスを受け取ります。

ダイアログ ボックス内に (ダイアログ リソースを使用して) オブジェクトを作成 CComboBox すると、ユーザーが CComboBox ダイアログ ボックスを閉じると、オブジェクトは自動的に破棄されます。

別のウィンドウ オブジェクト内にオブジェクトを CComboBox 埋め込む場合、オブジェクトを破棄する必要はありません。 スタック上にオブジェクトを CComboBox 作成すると、自動的に破棄されます。 関数を CComboBox 使用 new してヒープ上にオブジェクトを作成する場合は、Windows コンボ ボックスが破棄されたときにオブジェクトを破棄するオブジェクトを呼び出す delete 必要があります。

) 処理とWM_CHARメッセージを処理WM_KEYDOWNする場合は、コンボ ボックスのエディット ボックス コントロールとリスト ボックス コントロールをサブクラス化し、それらのメッセージのクラスを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 ポインター。

戻り値

構造体で説明されている 2 つの項目の相対位置を COMPAREITEMSTRUCT 示します。 次のいずれかの値を指定できます。

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
コンボ ボックスの親ウィンドウ (通常は a CDialog) を指定します。 次に指定 NULLすることはできません。

nID
コンボ ボックスのコントロール ID を指定します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

2 つの手順でオブジェクトを CComboBox 構築します。 まず、コンストラクターを呼び出してから呼び出 Createします。これにより、Windows コンボ ボックスが作成され、オブジェクトに CComboBox アタッチされます。

実行すると Create 、Windows はコンボ ボックスに WM_NCCREATEWM_CREATE、、 WM_NCCALCSIZE、、、および WM_GETMINMAXINFO メッセージを送信します。

これらのメッセージは、基底クラスの 、、、およびOnGetMinMaxInfoメンバー関数によって既定でCWnd処理されます。 OnNcCalcSizeOnCreateOnNcCreate 既定のメッセージ処理を拡張するには、クラスを 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 以上の場合は、リスト内でメイン文字列の数になります。 戻り値は、 CB_ERR リスト内の項目数より大きいインデックスを指定する場合 nIndex です。

解説

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 種類に関する情報を含む構造体へのポインター。

解説

構造体のメンバーは itemActionDRAWITEMSTRUCT 実行する描画アクションを定義します。 この構造の説明については、以下を参照してください 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項目に戻ります。 -1 の場合 nIndexStart 、リスト ボックス全体が最初から検索されます。

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 [CO MB (メガバイト)OBOXINFO'](/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 キュー バナー テキストが存在する場合はそのテキストを含むオブジェクト。それ以外の場合は長 CString さが 0 のオブジェクト。

または

このメソッドが成功した場合は TRUE 2 番目のオーバーロード。それ以外の場合は . 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_DROPDOWNLISTスタイルを持つCBS_DROPDOWNコンボ ボックスにのみ適用されます。

既定では、ドロップダウン リスト ボックスの最小許容幅は 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 ビット値は、メンバー関数呼び出しの dwItemData パラメーターで SetItemData 設定できます。 取得する GetItemDataPtr 32 ビット値がポインター (void*) の場合は、メンバー関数を使用します。

// 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_OWNERDRAWVARIABLEnIndex 高さを取得するリスト アイテムの 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;

戻り値

成功した CB_ERR 場合、コンボ ボックスのリスト ボックス部分に表示される最初の項目の 0 から始まるインデックス。それ以外の場合。

解説

最初は、項目 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の関数 InsertStringDir 関数に可能な限り短い時間がかかります。 パラメーターには見積もりを使用できます。 過大評価すると、追加のメモリが割り当てられます。過小評価する場合は、事前に割り当てられた金額を超えるアイテムに対して通常の割り当てが使用されます。

// 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 回だけ呼び出されます。

CBS_OWNERDRAWFIXEDメンバー関数で作成された所有者描画コンボ ボックスでスタイルを使用するには、SubclassDlgItemプログラミング上のCWnd考慮事項がさらに必要です。 テクニカル ノート 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 変更されず、現在の選択は変更されません。

解説

文字列は、最初の文字 (開始点) がプレフィックス文字列の文字と一致する場合にのみ選択されます。

メンバー関数とメンバーFindString関数はSelectStringどちらも文字列を検索しますが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 から始まるインデックス。 戻り値は、CB_ERRnSelectリスト内の項目数より大きい場合、または -1 に設定されている場合nSelectに選択をクリアします。

解説

必要に応じて、リスト ボックスは文字列をスクロールして表示します (リスト ボックスが表示されている場合)。 コンボ ボックスの編集コントロール内のテキストが、新しい選択内容を反映するように変更されます。 リスト ボックス内の以前の選択は削除されます。

// 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_DROPDOWNLISTスタイルを持つCBS_DROPDOWNコンボ ボックスにのみ適用されます。

既定では、ドロップダウン リスト ボックスの最小許容幅は 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。 CB_ERRスタイルがあるCBS_DROPDOWNLIST場合、またはリスト ボックスがない場合CComboBoxです。

解説

位置は 0 から始まります。 編集コントロールの最初の文字を選択するには、開始位置として 0 を指定します。 終了位置は、最後の文字の直後の文字を選択するための位置です。 たとえば、編集コントロールの最初の 4 文字を選択するには、開始位置 0 と終了位置 4 を使用します。

Note

この関数は、Windows ComboBoxEx コントロールではサポートされていません。 このコントロールの詳細については、「Windows SDK のコントロール」を参照してくださいComboBoxEx

CComboBox::GetEditSel の例を参照してください。

CComboBox::SetExtendedUI

メンバー関数をSetExtendedUI呼び出して、既定のユーザー インターフェイスまたはスタイルを持つCBS_DROPDOWNCBS_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_OWNERDRAWVARIABLEnIndex 高さを設定するリスト アイテムの 0 から始まるインデックスを指定します。それ以外の場合は 0 を指定し、 nIndex すべてのリスト アイテムの高さを設定する必要があります。

-1 の場合 nIndex 、コンボ ボックスのエディット コントロールまたは静的テキスト部分の高さが設定されます。

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 から始まるインデックスを指定します。

戻り値

成功した場合、または CB_ERR エラーが発生した場合は 0。

解説

指定された 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 クラス