CListBox クラス

Windows のリスト ボックスの機能を提供します。

構文

class CListBox : public CWnd

メンバー

パブリック コンストラクター

名前 説明
CListBox::CListBox CListBox オブジェクトを構築します。

パブリック メソッド

名前 説明
CListBox::AddString リスト ボックスに文字列を追加します。
CListBox::CharToItem 文字列を持たない所有者描画リスト ボックスのカスタム WM_CHAR 処理を提供するためにオーバーライドします。
CListBox::CompareItem 並べ替えられた所有者描画リスト ボックス内の新しい項目の位置を決定するために、フレームワークによって呼び出されます。
CListBox::Create Windows リスト ボックスを作成し、オブジェクトに CListBox アタッチします。
CListBox::DeleteItem ユーザーが所有者描画リスト ボックスから項目を削除すると、フレームワークによって呼び出されます。
CListBox::DeleteString リスト ボックスから文字列を削除します。
CListBox::Dir 現在のディレクトリからリスト ボックスにファイル名、ドライブ、またはその両方を追加します。
CListBox::DrawItem 所有者描画リスト ボックスの視覚的な側面が変更されたときにフレームワークによって呼び出されます。
CListBox::FindString リスト ボックス内の文字列を検索します。
CListBox::FindStringExact 指定した文字列と一致する最初のリスト ボックス文字列を検索します。
CListBox::GetAnchorIndex リスト ボックス内の現在のアンカー項目の 0 から始まるインデックスを取得します。
CListBox::GetCaretIndex 複数選択リスト ボックスにフォーカスがある四角形を持つ項目のインデックスを決定します。
CListBox::GetCount リスト ボックス内の文字列の数を返します。
CListBox::GetCurSel リスト ボックスで現在選択されている文字列の 0 から始まるインデックスを返します。
CListBox::GetHorizontalExtent リスト ボックスを水平方向にスクロールできる幅をピクセル単位で返します。
CListBox::GetItemData リスト ボックス項目に関連付けられている値を返します。
CListBox::GetItemDataPtr リスト ボックス項目へのポインターを返します。
CListBox::GetItemHeight リスト ボックス内の項目の高さを指定します。
CListBox::GetItemRect 現在表示されているリスト ボックス項目の外接する四角形を返します。
CListBox::GetListBoxInfo 列あたりの項目数を取得します。
CListBox::GetLocale リスト ボックスのロケール識別子を取得します。
CListBox::GetSel リスト ボックス項目の選択状態を返します。
CListBox::GetSelCount 複数選択リスト ボックスで現在選択されている文字列の数を返します。
CListBox::GetSelItems リスト ボックスで現在選択されている文字列のインデックスを返します。
CListBox::GetText リスト ボックス項目をバッファーにコピーします。
CListBox::GetTextLen リスト ボックス項目の長さをバイト単位で返します。
CListBox::GetTopIndex リスト ボックス内の最初に表示される文字列のインデックスを返します。
CListBox::InitStorage リスト ボックスの項目と文字列のメモリ ブロックを事前割り当てします。
CListBox::InsertString リスト ボックス内の特定の場所に文字列を挿入します。
CListBox::ItemFromPoint ポイントに最も近いリスト ボックス項目のインデックスを返します。
CListBox::MeasureItem リスト ボックスディメンションを決定するために所有者描画リスト ボックスが作成されるときにフレームワークによって呼び出されます。
CListBox::ResetContent リスト ボックスからすべてのエントリをクリアします。
CListBox::SelectString 単一選択リスト ボックスで文字列を検索して選択します。
CListBox::SelItemRange 複数選択リスト ボックス内の文字列の範囲を選択または選択解除します。
CListBox::SetAnchorIndex 複数選択リスト ボックスのアンカーを設定して、拡張選択を開始します。
CListBox::SetCaretIndex 複数選択リスト ボックスの指定したインデックス位置にある項目にフォーカス四角形を設定します。
CListBox::SetColumnWidth 複数列のリスト ボックスの列幅を設定します。
CListBox::SetCurSel リスト ボックス文字列を選択します。
CListBox::SetHorizontalExtent リスト ボックスを水平方向にスクロールできる幅をピクセル単位で設定します。
CListBox::SetItemData リスト ボックス項目に関連付けられている値を設定します。
CListBox::SetItemDataPtr リスト ボックス項目へのポインターを設定します。
CListBox::SetItemHeight リスト ボックス内の項目の高さを設定します。
CListBox::SetLocale リスト ボックスのロケール識別子を設定します。
CListBox::SetSel 複数選択リスト ボックスのリスト ボックス項目を選択または選択解除します。
CListBox::SetTabStops リスト ボックス内のタブ位置を設定します。
CListBox::SetTopIndex リスト ボックス内の最初に表示される文字列の 0 から始まるインデックスを設定します。
CListBox::VKeyToItem スタイル セットを持つリスト ボックスのカスタム WM_KEYDOWN 処理を提供するには、 LBS_WANTKEYBOARDINPUT オーバーライドします。

解説

リスト ボックスには、ユーザーが表示および選択できる項目の一覧 (ファイル名など) が表示されます。

単一選択リスト ボックスでは、ユーザーは 1 つの項目のみを選択できます。 複数選択リスト ボックスでは、項目の範囲を選択できます。 ユーザーが項目を選択すると、その項目が強調表示され、リスト ボックスから親ウィンドウに通知メッセージが送信されます。

リスト ボックスは、ダイアログ テンプレートから作成することも、コード内で直接作成することもできます。 直接作成するには、オブジェクトを CListBox 構築し、メンバー関数を Create 呼び出して Windows リスト ボックス コントロールを作成し、オブジェクトに CListBox アタッチします。 ダイアログ テンプレートでリスト ボックスを使用するには、ダイアログ ボックス クラスでリスト ボックス変数を宣言してから DDX_Control 、ダイアログ ボックス クラスの DoDataExchange 関数でメンバー変数をコントロールに接続します。 (これは、ダイアログ ボックス クラスにコントロール変数を追加するときに自動的に行われます)。

構築は、派生 CListBoxクラス内の 1 ステップ プロセスにすることができます。 派生クラスのコンストラクターを記述し、コンストラクター内から呼び出 Create します。

リスト ボックスから親 (通常は派生 CDialogしたクラス) に送信された Windows 通知メッセージを処理する場合は、メッセージ マップ エントリとメッセージ ハンドラー メンバー関数を各メッセージの親クラスに追加します。

各メッセージ マップ エントリの形式は次のとおりです。

ON_Notification( id, memberFxn )

ここで id 、通知を送信するリスト ボックス コントロールの子ウィンドウ ID と、 memberFxn 通知を処理するために作成した親メンバー関数の名前を指定します。

親の関数プロトタイプは次のとおりです。

afx_msg void memberFxn( );

潜在的なメッセージ マップ エントリの一覧と、親に送信されるケースの説明を次に示します。

  • ON_LBN_DBLCLK ユーザーがリスト ボックス内の文字列をダブルクリックします。 スタイルを持つ LBS_NOTIFY リスト ボックスのみが、この通知メッセージを送信します。

  • ON_LBN_ERRSPACE リスト ボックスは、要求を満たすのに十分なメモリを割り当てることができません。

  • ON_LBN_KILLFOCUS リスト ボックスが入力フォーカスを失います。

  • ON_LBN_SELCANCEL 現在のリスト ボックスの選択は取り消されます。 このメッセージは、リスト ボックスにスタイルがある LBS_NOTIFY 場合にのみ送信されます。

  • ON_LBN_SELCHANGE リスト ボックスの選択内容が変更されました。 メンバー関数によって CListBox::SetCurSel 選択が変更された場合、この通知は送信されません。 この通知は、スタイルを持つ LBS_NOTIFY リスト ボックスにのみ適用されます。 選択内容が LBN_SELCHANGE 変更されない場合でも、ユーザーが方向キーを押すたびに、複数選択リスト ボックスの通知メッセージが送信されます。

  • ON_LBN_SETFOCUS リスト ボックスが入力フォーカスを受け取ります。

  • ON_WM_CHARTOITEM 文字列を含まない所有者描画リスト ボックスは、メッセージを WM_CHAR 受信します。

  • ON_WM_VKEYTOITEM スタイルが設定されたリスト ボックスは LBS_WANTKEYBOARDINPUT 、メッセージを WM_KEYDOWN 受信します。

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

ウィンドウ内にオブジェクトを CListBox 作成する場合は、オブジェクトを破棄 CListBox することが必要な場合があります。 スタック上にオブジェクトを CListBox 作成すると、自動的に破棄されます。 関数を CListBox 使用 new してヒープ上にオブジェクトを作成する場合は、オブジェクトを呼び出 delete して、ユーザーが親ウィンドウを閉じるときに破棄する必要があります。

オブジェクトにメモリを割り当てる場合は、デストラクターをCListBoxCListBoxオーバーライドして割り当てを破棄します。

継承階層

CObject

CCmdTarget

CWnd

CListBox

必要条件

ヘッダー:afxwin.h

CListBox::AddString

リスト ボックスに文字列を追加します。

int AddString(LPCTSTR lpszItem);

パラメーター

lpszItem
追加する null で終わる文字列を指します。

戻り値

リスト ボックス内の文字列に対する 0 から始まるインデックス。 戻り値は LB_ERR エラーが発生した場合です。戻り値は、 LB_ERRSPACE 新しい文字列を格納するために十分な領域がない場合です。

解説

リスト ボックスがスタイルで LBS_SORT 作成されていない場合は、文字列がリストの末尾に追加されます。 それ以外の場合は、文字列がリストに挿入され、リストが並べ替えられます。 スタイルではなくスタイルLBS_HASSTRINGSを使用してLBS_SORTリスト ボックスが作成された場合、フレームワークはメンバー関数の 1 つ以上の呼び出しでリストをCompareItem並べ替えます。

リスト ボックス内の特定の場所に文字列を挿入するために使用 InsertString します。

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::CharToItem

リスト ボックスの親ウィンドウがリスト ボックスからメッセージを受信すると、 WM_CHARTOITEM フレームワークによって呼び出されます。

virtual int CharToItem(
    UINT nKey,
    UINT nIndex);

パラメーター

nKey
ユーザーが入力した文字の ANSI コード。

nIndex
リスト ボックス キャレットの現在位置。

戻り値

それ以上操作しない場合は 1 または - 2 を返し、キーストロークの既定のアクションを実行するリスト ボックス項目のインデックスを指定する負でない数値を返します。 既定の実装では、- 1 が返されます。

解説

メッセージは WM_CHARTOITEM 、メッセージを受信 WM_CHAR したときにリスト ボックスによって送信されますが、リスト ボックスが次のすべての条件を満たしている場合にのみ送信されます。

  • 所有者描画リスト ボックスです。

  • スタイルが LBS_HASSTRINGS 設定されていません。

  • 少なくとも 1 つの項目があります。

この関数を自分で呼び出すべきではありません。 キーボード メッセージの独自のカスタム処理を提供するには、この関数をオーバーライドします。

オーバーライドでは、実行したアクションをフレームワークに伝える値を返す必要があります。 戻り値 - 1 または - 2 は、項目の選択のすべての側面を処理したことを示し、リスト ボックスによるそれ以上のアクションは必要ありません。 1 または - 2 を返す前に、選択を設定するか、キャレットまたはその両方を移動できます。 選択範囲を設定するには、次の値を使用 SetCurSel します SetSel。 キャレットを移動するには、SetCaretIndex

戻り値が 0 以上の場合は、リスト ボックス内の項目のインデックスを指定し、リスト ボックスが指定された項目に対してキーストロークの既定のアクションを実行する必要があることを示します。

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
   // On a numeric key, move the caret up one item.
   if (isdigit(nChar) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On an alphabetic key, move the caret down one item.
   else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -1;
}

CListBox::CListBox

CListBox オブジェクトを構築します。

CListBox();

解説

2 つの手順でオブジェクトを CListBox 構築します。 まず、コンストラクター ClistBox を呼び出し、次に呼び出 Createします。これにより、Windows リスト ボックスが初期化され、 CListBox..

// Declare a local CListBox object.
CListBox myListBox;

// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;

CListBox::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 して所有者描画リスト ボックスを作成する場合は、このメンバー関数をオーバーライドして、リスト ボックスに追加された新しい項目をフレームワークが並べ替えるのを支援する必要があります。

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
   ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
   ASSERT(lpszText1 != NULL);
   LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
   ASSERT(lpszText2 != NULL);

   return _tcscmp(lpszText2, lpszText1);
}

CListBox::Create

Windows リスト ボックスを作成し、オブジェクトに CListBox アタッチします。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

パラメーター

dwStyle
リスト ボックスのスタイルを指定します。 リスト ボックス スタイルの任意の組み合わせをボックスに適用します。

rect
リスト ボックスのサイズと位置を指定します。 CRectオブジェクトまたは構造体をRECT指定できます。

pParentWnd
リスト ボックスの親ウィンドウ (通常はオブジェクト) を CDialog 指定します。 次に指定 NULLすることはできません。

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

戻り値

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

解説

2 つの手順でオブジェクトを CListBox 構築します。 まず、コンストラクターを呼び出してから、Windows リスト ボックスを初期化してオブジェクトにアタッチする呼び出 Createしを CListBox 行います。

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

これらのメッセージは、基底クラスの 、、、およびOnGetMinMaxInfoメンバー関数によって既定でCWnd処理されます。 OnNcCalcSizeOnCreateOnNcCreate 既定のメッセージ処理を拡張するには、クラスを CListBox派生させ、新しいクラスにメッセージ マップを追加し、前のメッセージ ハンドラー メンバー関数をオーバーライドします。 OnCreateたとえば、新しいクラスに必要な初期化を実行するためにオーバーライドします。

のウィンドウ スタイル をリスト ボックス コントロールに適用します。

  • WS_CHILD いつも

  • WS_VISIBLE 通常は

  • WS_DISABLED ほとんど

  • WS_VSCROLL 垂直スクロール バーを追加するには

  • WS_HSCROLL 水平スクロール バーを追加するには

  • WS_GROUP コントロールをグループ化するには

  • WS_TABSTOP このコントロールへのタブ移動を許可するには

// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
                   CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);

CListBox::DeleteItem

ユーザーが所有者描画 CListBox オブジェクトから項目を削除するか、リスト ボックスを破棄するときに、フレームワークによって呼び出されます。

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

パラメーター

lpDeleteItemStruct
削除されたアイテムに関する情報を含む Windows DELETEITEMSTRUCT 構造体への長いポインター。

解説

この関数の既定の実装は、何も行いません。 必要に応じて所有者描画リスト ボックスを再描画するには、この関数をオーバーライドします。

構造の説明については、以下をDELETEITEMSTRUCT参照してくださいCWnd::OnDeleteItem

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
   ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
   LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
   ASSERT(lpszText != NULL);

   free(lpszText);

   CListBox::DeleteItem(lpDeleteItemStruct);
}

CListBox::DeleteString

リスト ボックスから位置 nIndex にある項目を削除します。

int DeleteString(UINT nIndex);

パラメーター

nIndex
削除する文字列の 0 から始まるインデックスを指定します。

戻り値

リスト内のメイン文字列の数。 戻り値は、 LB_ERR リスト内の項目数より大きいインデックスを指定する場合 nIndex です。

解説

nIndex のすべての項目が 1 つ下の位置に移動するようになりました。 たとえば、リスト ボックスに 2 つの項目が含まれている場合、最初の項目を削除すると、再メイン項目が最初の位置になります。 nIndex最初の位置にある項目の場合は =0。

// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.DeleteString(i);
}

CListBox::Dir

ファイル名、ドライブ、またはその両方のリストをリスト ボックスに追加します。

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

パラメーター

attr
次に示すCFile::GetStatus値のenum任意の組み合わせ、または次の値の任意の組み合わせを指定できます。

Value 意味
0x0000 ファイルの読み取りまたは書き込みが可能です。
0x0001 ファイルは読み取り可能ですが、書き込むには使用できません。
0x0002 ファイルは非表示であり、ディレクトリ一覧には表示されません。
0x0004 ファイルはシステム ファイルです。
0x0010 指定した名前は lpszWildCard 、ディレクトリを指定します。
0x0020 ファイルがアーカイブされました。
0x4000 で指定した lpszWildCard名前に一致するすべてのドライブを含めます。
0x8000 排他フラグ。 排他フラグが設定されている場合は、指定した種類のファイルのみが一覧表示されます。 それ以外の場合は、指定した種類のファイルが、"標準" ファイルに加えて一覧表示されます。

lpszWildCard
ファイル指定文字列を指します。 文字列には、ワイルドカード (例: *.*) を含めることができます。

戻り値

リストに追加された最後のファイル名の 0 から始まるインデックス。 戻り値は LB_ERR エラーが発生した場合です。戻り値は、 LB_ERRSPACE 新しい文字列を格納するために十分な領域がない場合です。

// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);

::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);

m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));

::SetCurrentDirectory(lpszOldPath);

CListBox::DrawItem

所有者描画リスト ボックスの視覚的な側面が変更されたときにフレームワークによって呼び出されます。

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

パラメーター

lpDrawItemStruct
必要な描画の DRAWITEMSTRUCT 種類に関する情報を含む構造体への長いポインター。

解説

itemAction構造体のメンバーはitemStateDRAWITEMSTRUCT実行する描画アクションを定義します。

既定では、このメンバー関数は何も行いません。 所有者描画 CListBox オブジェクトの描画を実装するには、このメンバー関数をオーバーライドします。 アプリケーションは、このメンバー関数が終了する前に、指定された lpDrawItemStruct 表示コンテキストに対して選択されているすべてのグラフィックス デバイス インターフェイス (GDI) オブジェクトを復元する必要があります。

構造の説明については、以下をDRAWITEMSTRUCT参照してくださいCWnd::OnDrawItem

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
   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. Also, erase
   // 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);
   }

   // If this item has the focus, draw a red frame around the
   // item's rect.
   if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
       (lpDrawItemStruct->itemState & ODS_FOCUS))
   {
      CBrush br(RGB(255, 0, 0));
      dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
   }

   // 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();
}

CListBox::FindString

リスト ボックスの選択を変更せずに、指定したプレフィックスを含むリスト ボックス内の最初の文字列を検索します。

int FindString(
    int nStartAfter,
    LPCTSTR lpszItem) const;

パラメーター

nStartAfter
検索する最初の項目の前にある項目の 0 から始まるインデックスを格納します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から次で指定した nStartAfter項目に戻ります。 -1 の場合 nStartAfter 、リスト ボックス全体が最初から検索されます。

lpszItem
検索するプレフィックスを含む null で終わる文字列を指します。 検索では大文字と小文字が区別されないため、この文字列には大文字と小文字の任意の組み合わせが含まれる場合があります。

戻り値

一致する項目の 0 から始まるインデックス、または LB_ERR 検索が失敗した場合。

解説

メンバー関数を SelectString 使用して、文字列を検索して選択します。

// The string to match.
LPCTSTR lpszmyString = _T("item");

// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::FindStringExact

で指定した lpszFind文字列と一致する最初のリスト ボックス文字列を検索します。

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

パラメーター

nIndexStart
検索する最初の項目の前にある項目の 0 から始まるインデックスを指定します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から次で指定した nIndexStart項目に戻ります。 -1 の場合 nIndexStart 、リスト ボックス全体が最初から検索されます。

lpszFind
検索する null で終わる文字列を指します。 この文字列には、拡張子を含む完全なファイル名を含めることができます。 検索では大文字と小文字が区別されないため、文字列には大文字と小文字の任意の組み合わせを含めることができます。

戻り値

一致する項目のインデックス、または LB_ERR 検索が失敗した場合。

解説

リスト ボックスが所有者描画スタイルを使用して作成されたがスタイルがない LBS_HASSTRINGS 場合、 FindStringExact メンバー関数は doubleword 値と値の照合を lpszFind試みます。

// The string to match.
LPCTSTR lpszmyString = _T("item string 3");

// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::GetAnchorIndex

リスト ボックス内の現在のアンカー項目の 0 から始まるインデックスを取得します。

int GetAnchorIndex() const;

戻り値

成功した場合の現在のアンカー項目のインデックス。それ以外の場合はLB_ERR。

解説

複数選択リスト ボックスでは、アンカー項目は、連続して選択された項目のブロック内の最初または最後の項目です。

CListBox::SetAnchorIndex の例を参照してください。

CListBox::GetCaretIndex

複数選択リスト ボックスにフォーカスがある四角形を持つ項目のインデックスを決定します。

int GetCaretIndex() const;

戻り値

リスト ボックスにフォーカスの四角形がある項目の 0 から始まるインデックス。 リスト ボックスが単一選択リスト ボックスの場合、戻り値は選択されている項目のインデックス (存在する場合) になります。

解説

項目が選択されている場合と選択されていない場合があります。

CListBox::SetCaretIndex の例を参照してください。

CListBox::GetCount

リスト ボックス内の項目の数を取得します。

int GetCount() const;

戻り値

リスト ボックス内の項目の数、または LB_ERR エラーが発生した場合。

解説

返されるカウントは、最後の項目のインデックス値より 1 大きい値です (インデックスは 0 から始まります)。

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item %d"), i);
   m_myListBox.AddString(str);
}

// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);

CListBox::GetCurSel

現在選択されている項目 (存在する場合) の 0 から始まるインデックスを単一選択リスト ボックスで取得します。

int GetCurSel() const;

戻り値

現在選択されている項目が 1 つの選択リスト ボックスの場合は、0 から始まるインデックス。 現在項目が LB_ERR 選択されていない場合です。

複数選択リスト ボックスで、フォーカスがある項目のインデックス。

解説

複数選択リスト ボックスを呼び出 GetCurSel さないでください。 代わりに CListBox::GetSelItems を使用してください

// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
   if (++nIndex < nCount)
      m_myListBox.SetCurSel(nIndex);
   else
      m_myListBox.SetCurSel(0);
}

CListBox::GetHorizontalExtent

リスト ボックスから、水平方向にスクロールできる幅をピクセル単位で取得します。

int GetHorizontalExtent() const;

戻り値

リスト ボックスのスクロール可能な幅 (ピクセル単位)。

解説

これは、リスト ボックスに水平スクロール バーがある場合にのみ適用されます。

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);

// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
   m_myListBox.SetHorizontalExtent(dx);
   ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}

CListBox::GetItemData

指定したリスト ボックス項目に関連付けられているアプリケーション指定の doubleword 値を取得します。

DWORD_PTR GetItemData(int nIndex) const;

パラメーター

nIndex
リスト ボックス内の項目の 0 から始まるインデックスを指定します。

戻り値

項目に関連付けられている値、または LB_ERR エラーが発生した場合。

解説

doubleword 値は呼び出し dwItemDataSetItemData パラメーターでした。

// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemData(i) == 0)
   {
      m_myListBox.SetItemData(i, (DWORD)-1);
   }
}

CListBox::GetItemDataPtr

指定したリスト ボックス項目に関連付けられているアプリケーション指定の 32 ビット値をポインター (void*) として取得します。

void* GetItemDataPtr(int nIndex) const;

パラメーター

nIndex
リスト ボックス内の項目の 0 から始まるインデックスを指定します。

戻り値

ポインターを取得します。エラーが発生した場合は -1 を取得します。

LPVOID lpmyPtr = pParentWnd;

// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
   {
      m_myListBox.SetItemDataPtr(i, NULL);
   }
}

CListBox::GetItemHeight

リスト ボックス内の項目の高さを指定します。

int GetItemHeight(int nIndex) const;

パラメーター

nIndex
リスト ボックス内の項目の 0 から始まるインデックスを指定します。 このパラメーターは、リスト ボックスにスタイルがある LBS_OWNERDRAWVARIABLE 場合にのみ使用されます。それ以外の場合は 0 に設定する必要があります。

戻り値

リスト ボックス内の項目の高さ (ピクセル単位)。 リスト ボックスにスタイルが設定されている LBS_OWNERDRAWVARIABLE 場合、戻り値は 〘 で指定された nIndex項目の高さになります。 エラーが発生した場合、戻り値は LB_ERR.

// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   // Only want to set the item height if the current height
   // is not big enough.
   if (m_myListBox.GetItemHeight(i) < sz.cy)
      m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);

CListBox::GetItemRect

リスト ボックス ウィンドウに現在表示されているリスト ボックス 項目を囲む四角形の寸法を取得します。

int GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

パラメーター

nIndex
項目の 0 から始まるインデックスを指定します。

lpRect
アイテムのリスト ボックス クライアント座標を RECT 受け取る構造体 への長いポインターを指定します。

戻り値

LB_ERR エラーが発生した場合は 。

// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetItemRect(i, &r);

   str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
              _T("bottom = %d\r\n"),
              i,
              r.left,
              r.top,
              r.right,
              r.bottom);
   AFXDUMP(str);
}

CListBox::GetListBoxInfo

列あたりの項目数を取得します。

DWORD GetListBoxInfo() const;

戻り値

オブジェクトの列あたりの項目数 CListBox

解説

このメンバー関数は、Windows SDK で説明されているように、メッセージの LB_GETLISTBOXINFO 機能をエミュレートします。

CListBox::GetLocale

リスト ボックスで使用されるロケールを取得します。

LCID GetLocale() const;

戻り値

リスト ボックス内の文字列のロケール識別子 (LCID) 値。

解説

たとえば、ロケールは、並べ替えられたリスト ボックス内の文字列の並べ替え順序を決定するために使用されます。

CListBox::SetLocale の例を参照してください。

CListBox::GetSel

項目の選択状態を取得します。

int GetSel(int nIndex) const;

パラメーター

nIndex
項目の 0 から始まるインデックスを指定します。

戻り値

指定した項目が選択されている場合は正の数値。それ以外の場合は 0 です。 戻り値は、 LB_ERR エラーが発生した場合です。

解説

このメンバー関数は、単一選択リスト ボックスと複数選択リスト ボックスの両方で動作します。

現在選択されているリスト ボックス項目のインデックスを取得するには、次を使用 CListBox::GetCurSelします。

// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   str.Format(_T("item %d: select state is %s\r\n"),
              i,
              m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
   AFXDUMP(str);
}

CListBox::GetSelCount

複数選択リスト ボックス内の選択した項目の合計数を取得します。

int GetSelCount() const;

戻り値

リスト ボックス内の選択した項目の数。 リスト ボックスが単一選択リスト ボックスの場合、戻り値は LB_ERR.

CListBox::GetSelItems の例を参照してください。

CListBox::GetSelItems

複数選択リスト ボックスで選択した項目の項目番号を指定する整数の配列をバッファーに格納します。

int GetSelItems(
    int nMaxItems,
    LPINT rgIndex) const;

パラメーター

nMaxItems
バッファーに配置する項目番号を持つ、選択した項目の最大数を指定します。

rgIndex
で指定された整数の数に十分な大きさのバッファーへのポインターを指定 nMaxItemsします。

戻り値

バッファーに配置された項目の実際の数。 リスト ボックスが単一選択リスト ボックスの場合、戻り値は LB_ERR.

// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;

aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());

// Dump the selection array.
AFXDUMP(aryListBoxSel);

CListBox::GetText

リスト ボックスから文字列を取得します。

int GetText(
    int nIndex,
    LPTSTR lpszBuffer) const;

void GetText(
    int nIndex,
    CString& rString) const;

パラメーター

nIndex
取得する文字列の 0 から始まるインデックスを指定します。

lpszBuffer
文字列を受け取るバッファーを指します。 バッファーには、文字列と終端の null 文字に対して十分な領域が必要です。 文字列のサイズは、メンバー関数を呼び出すことによって事前に GetTextLen 決定できます。

rString
CString オブジェクトへの参照です。

戻り値

終端の null 文字を除く、文字列の長さ (バイト単位)。 有効なインデックスを指定しない場合 nIndex 、戻り値は LB_ERR.

解説

このメンバー関数の 2 番目の形式は、文字列テキストで CString オブジェクトを埋めます。

// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   n = m_myListBox.GetTextLen(i);
   m_myListBox.GetText(i, str.GetBuffer(n));
   str.ReleaseBuffer();

   str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
   AFXDUMP(str2);
}

CListBox::GetTextLen

リスト ボックス項目内の文字列の長さを取得します。

int GetTextLen(int nIndex) const;

パラメーター

nIndex
文字列の 0 から始まるインデックスを指定します。

戻り値

終端の null 文字を除く文字列の長さ (文字数)。 有効なインデックスを指定しない場合 nIndex 、戻り値は LB_ERR.

CListBox::GetText の例を参照してください。

CListBox::GetTopIndex

リスト ボックス内の最初に表示される項目の 0 から始まるインデックスを取得します。

int GetTopIndex() const;

戻り値

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

解説

最初は、項目 0 はリスト ボックスの上部にありますが、リスト ボックスがスクロールされている場合は、別の項目が一番上にある可能性があります。

// Want an item in the bottom half to be the first visible item.
int n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
   m_myListBox.SetTopIndex(n);
   ASSERT(m_myListBox.GetTopIndex() == n);
}

CListBox::InitStorage

リスト ボックス項目を格納するためのメモリを割り当てます。

int InitStorage(
    int nItems,
    UINT nBytes);

パラメーター

nItems
追加する項目の数を指定します。

nBytes
項目文字列に割り当てるメモリの量をバイト単位で指定します。

戻り値

成功した場合、メモリの再割り当てが必要になるまでにリスト ボックスに格納できる項目の最大数。それ以外の場合 LB_ERRSPACEは、十分なメモリが使用できません。

解説

に多数の項目を追加する前に、この関数を CListBox呼び出します。

この関数は、多数の項目 (100 個を超える) を含むリスト ボックスの初期化を高速化するのに役立ちます。 指定されたメモリ量が事前に割り当てられ、後続 AddStringの関数 InsertStringDir 関数に可能な限り短い時間がかかります。 パラメーターには見積もりを使用できます。 過大評価すると、追加のメモリが割り当てられます。過小評価する場合は、事前に割り当てられた金額を超えるアイテムに対して通常の割り当てが使用されます。

Windows 95/98 のみ: パラメーターは nItems 16 ビット値に制限されています。 つまり、リスト ボックスには 32,767 個を超えるアイテムを含めることはできません。 項目の数は制限されていますが、リスト ボックス内の項目の合計サイズは、使用可能なメモリによってのみ制限されます。

// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);

// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::InsertString

リスト ボックスに文字列を挿入します。

int InsertString(
    int nIndex,
    LPCTSTR lpszItem);

パラメーター

nIndex
文字列を挿入する位置の 0 から始まるインデックスを指定します。 このパラメーターが -1 の場合、文字列はリストの末尾に追加されます。

lpszItem
挿入される null で終わる文字列を指します。

戻り値

文字列が挿入された位置の 0 から始まるインデックス。 戻り値は LB_ERR エラーが発生した場合です。戻り値は、 LB_ERRSPACE 新しい文字列を格納するために十分な領域がない場合です。

解説

AddStringメンバー関数とは異なり、InsertStringスタイルを持つリストはLBS_SORT並べ替えされません。

// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
   str.Format(_T("item string %c"), (char)('A' + i));
   m_myListBox.InsertString(2 * i, str);
}

CListBox::ItemFromPoint

で指定したポイントに最も近いリスト ボックス項目を決定 ptします。

UINT ItemFromPoint(
    CPoint pt,
    BOOL& bOutside) const;

パラメーター

pt
リスト ボックスのクライアント領域の左上隅を基準にして指定された、最も近い項目を検索するポイント。

bOutside
リスト ボックスのBOOLクライアント領域内にある場合ptは、FALSEリスト ボックスのクライアント領域の外側にある場合ptに設定TRUEされる変数への参照。

戻り値

で指定された ptポイントに最も近い項目のインデックス。

解説

この関数を使用して、マウス カーソルが上に移動するリスト ボックス項目を決定できます。

CListBox::SetAnchorIndex の例を参照してください。

CListBox::MeasureItem

所有者描画スタイルのリスト ボックスが作成されるときに、フレームワークによって呼び出されます。

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

パラメーター

lpMeasureItemStruct
構造体への長い MEASUREITEMSTRUCT ポインター。

解説

既定では、このメンバー関数は何も行いません。 このメンバー関数をオーバーライドし、リスト ボックスのディメンションを MEASUREITEMSTRUCT Windows に通知する構造体を入力します。 スタイルを使用 LBS_OWNERDRAWVARIABLE してリスト ボックスが作成された場合、フレームワークはリスト ボックス内の各項目に対してこのメンバー関数を呼び出します。 それ以外の場合、このメンバーは 1 回だけ呼び出されます。

メンバー関数CWndで作成された所有者描画リスト ボックスでスタイルを使用LBS_OWNERDRAWFIXEDするSubclassDlgItem方法の詳細については、テクニカル ノート 14説明を参照してください。

構造の説明については、以下をMEASUREITEMSTRUCT参照してくださいCWnd::OnMeasureItem

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CSize sz;
   CDC *pDC = GetDC();

   sz = pDC->GetTextExtent(lpszText);

   ReleaseDC(pDC);

   lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}

CListBox::ResetContent

リスト ボックスからすべての項目を削除します。

void ResetContent();

// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);

CListBox::SelectString

指定した文字列と一致するリスト ボックス項目を検索し、一致する項目が見つかった場合は、その項目を選択します。

int SelectString(
    int nStartAfter,
    LPCTSTR lpszItem);

パラメーター

nStartAfter
検索する最初の項目の前にある項目の 0 から始まるインデックスを格納します。 検索がリスト ボックスの一番下に達すると、リスト ボックスの上部から次で指定した nStartAfter項目に戻ります。 -1 の場合 nStartAfter 、リスト ボックス全体が最初から検索されます。

lpszItem
検索するプレフィックスを含む null で終わる文字列を指します。 検索では大文字と小文字が区別されないため、この文字列には大文字と小文字の任意の組み合わせが含まれる場合があります。

戻り値

検索が成功した場合に選択した項目のインデックス。 検索が失敗した場合、戻り値は LB_ERR 変更されず、現在の選択は変更されません。

解説

リスト ボックスは、必要に応じてスクロールされ、選択した項目が表示されます。

このメンバー関数は、スタイルを持 LBS_MULTIPLESEL つリスト ボックスでは使用できません。

項目が選択されるのは、最初の文字 (開始点) が指定した lpszItem文字列内の文字と一致する場合のみです。

メンバー関数を FindString 使用して、項目を選択せずに文字列を検索します。

// The string to match.
LPCTSTR lpszmyString = _T("item 5");

// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);

CListBox::SelItemRange

複数選択リスト ボックスで複数の連続する項目を選択します。

int SelItemRange(
    BOOL bSelect,
    int nFirstItem,
    int nLastItem);

パラメーター

bSelect
選択範囲を設定する方法を指定します。 ある場合 bSelectTRUE、文字列が選択され、強調表示されます。場合 FALSEは強調表示が削除され、文字列は選択されなくなります。

nFirstItem
設定する最初の項目の 0 から始まるインデックスを指定します。

nLastItem
設定する最後の項目の 0 から始まるインデックスを指定します。

戻り値

LB_ERR エラーが発生した場合は 。

解説

このメンバー関数は、複数選択リスト ボックスでのみ使用します。 複数選択リスト ボックスで 1 つの項目のみを選択する必要がある場合(等しいnLastItem場合nFirstItem)、代わりにメンバー関数をSetSel呼び出します。

// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);

CListBox::SetAnchorIndex

複数選択リスト ボックスのアンカーを設定して、拡張選択を開始します。

void SetAnchorIndex(int nIndex);

パラメーター

nIndex
アンカーとなるリスト ボックス項目の 0 から始まるインデックスを指定します。

解説

複数選択リスト ボックスでは、アンカー項目は、連続して選択された項目のブロック内の最初または最後の項目です。

void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
   BOOL bOutside = TRUE;
   UINT uItem = ItemFromPoint(point, bOutside);

   if (!bOutside)
   {
      // Set the anchor to be the middle item.
      SetAnchorIndex(uItem);
      ASSERT((UINT)GetAnchorIndex() == uItem);
   }

   CListBox::OnLButtonDown(nFlags, point);
}

CListBox::SetCaretIndex

複数選択リスト ボックスの指定したインデックス位置にある項目にフォーカス四角形を設定します。

int SetCaretIndex(
    int nIndex,
    BOOL bScroll = TRUE);

パラメーター

nIndex
リスト ボックスでフォーカスの四角形を受け取る項目の 0 から始まるインデックスを指定します。

bScroll
この値が 0 の場合、項目は完全に表示されるまでスクロールされます。 この値が 0 でない場合、項目は少なくとも部分的に表示されるまでスクロールされます。

戻り値

LB_ERR エラーが発生した場合は 。

解説

項目が表示されていない場合は、ビューにスクロールされます。

// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);

CListBox::SetColumnWidth

(スタイルで作成された) 複数列のリスト ボックス内のすべての列の幅を LBS_MULTICOLUMN ピクセル単位で設定します。

void SetColumnWidth(int cxWidth);

パラメーター

cxWidth
すべての列の幅をピクセル単位で指定します。

// Find the pixel width of the largest item.
CString str;
CSize   sz;
int     dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set the column width of the first column to be one and 1/3 units
// of the largest string. 
myListBox.SetColumnWidth(dx * 4 / 3);

CListBox::SetCurSel

文字列を選択し、必要に応じてビューにスクロールします。

int SetCurSel(int nSelect);

パラメーター

nSelect
選択する文字列の 0 から始まるインデックスを指定します。 -1 の場合 nSelect 、リスト ボックスは選択されていないよう設定されます。

戻り値

LB_ERR エラーが発生した場合は 。

解説

新しい文字列を選択すると、リスト ボックスによって、前に選択した文字列から強調表示が削除されます。

このメンバー関数は、単一選択リスト ボックスでのみ使用します。

複数選択リスト ボックスで選択範囲を設定または削除するには、次を使用 CListBox::SetSelします。

// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
   m_myListBox.SetCurSel(nCount - 1);

CListBox::SetHorizontalExtent

リスト ボックスを水平方向にスクロールできる幅をピクセル単位で設定します。

void SetHorizontalExtent(int cxExtent);

パラメーター

cxExtent
リスト ボックスを水平方向にスクロールできるピクセル数を指定します。

解説

リスト ボックスのサイズがこの値より小さい場合、水平スクロール バーはリスト ボックス内の項目を水平方向にスクロールします。 リスト ボックスがこの値より大きいか大きい場合、水平スクロール バーは非表示になります。

呼び出しに SetHorizontalExtent応答するには、リスト ボックスがスタイルで WS_HSCROLL 定義されている必要があります。

このメンバー関数は、複数列のリスト ボックスには役立ちません。 複数列のリスト ボックスの場合は、メンバー関数を SetColumnWidth 呼び出します。

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.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_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(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_myListBox.ReleaseDC(pDC);

// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);

CListBox::SetItemData

リスト ボックス内の指定した項目に関連付けられた値を設定します。

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

パラメーター

nIndex
項目の 0 から始まるインデックスを指定します。

dwItemData
アイテムに関連付ける値を指定します。

戻り値

LB_ERR エラーが発生した場合は 。

// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemData(i, i);
}

CListBox::SetItemDataPtr

リスト ボックス内の指定した項目に関連付けられている 32 ビット値を、指定したポインター ( void*) に設定します。

int SetItemDataPtr(
    int nIndex,
    void* pData);

パラメーター

nIndex
項目の 0 から始まるインデックスを指定します。

pData
項目に関連付けるポインターを指定します。

戻り値

LB_ERR エラーが発生した場合は 。

解説

このポインターはメインリスト ボックス内の項目の相対位置が項目の追加または削除時に変更される可能性がある場合でも、リスト ボックスの有効期間中に有効です。 そのため、ボックス内の項目のインデックスは変更される可能性がありますが、ポインターメイン信頼できます。

// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemDataPtr(i, NULL);
}

CListBox::SetItemHeight

リスト ボックス内の項目の高さを設定します。

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

パラメーター

nIndex
リスト ボックス内の項目の 0 から始まるインデックスを指定します。 このパラメーターは、リスト ボックスにスタイルがある LBS_OWNERDRAWVARIABLE 場合にのみ使用されます。それ以外の場合は 0 に設定する必要があります。

cyItemHeight
項目の高さをピクセル単位で指定します。

戻り値

LB_ERR インデックスまたは高さが無効な場合は 。

解説

リスト ボックスにスタイルが設定されている LBS_OWNERDRAWVARIABLE 場合、この関数は次で指定した nIndex項目の高さを設定します。 それ以外の場合、この関数はリスト ボックス内のすべての項目の高さを設定します。

// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);

CListBox::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_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);

CListBox::SetSel

複数選択リスト ボックスで文字列を選択します。

int SetSel(
    int nIndex,
    BOOL bSelect = TRUE);

パラメーター

nIndex
設定する文字列の 0 から始まるインデックスを格納します。 -1 の場合、選択内容は値に応じてすべての文字列に bSelect追加または削除されます。

bSelect
選択範囲を設定する方法を指定します。 ある場合 bSelectTRUE、文字列が選択され、強調表示されます。場合 FALSEは強調表示が削除され、文字列は選択されなくなります。 指定した文字列が選択され、既定で強調表示されます。

戻り値

LB_ERR エラーが発生した場合は 。

解説

このメンバー関数は、複数選択リスト ボックスでのみ使用します。

単一選択リスト ボックスから項目を選択するには、次を使用 CListBox::SetCurSelします。

// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
   m_myODListBox.SetSel(i, ((i % 2) == 0));
}

CListBox::SetTabStops

リスト ボックス内のタブ位置を設定します。

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

パラメーター

cxEachStop
タブ位置は、ダイアログ単位ごとに cxEachStop 設定されます。 ダイアログ ユニットの説明を参照してください rgTabStops

nTabStops
リスト ボックスに含めるタブ位置の数を指定します。

rgTabStops
ダイアログ 単位のタブ位置を含む整数の配列の最初のメンバーを指します。 ダイアログ ユニットは、水平方向または垂直方向の距離です。 1 つの水平ダイアログユニットは現在のダイアログベースの幅単位の4分の1に等しく、1つの垂直ダイアログユニットは現在のダイアログベースの高さの単位の8分の1に等しくなります。 ダイアログの基本単位は、現在のシステム フォントの高さと幅に基づいて計算されます。 Windows 関数は GetDialogBaseUnits 、現在のダイアログの基本単位をピクセル単位で返します。 タブ位置は、昇順で並べ替える必要があります。バック タブは使用できません。

戻り値

すべてのタブが設定されている場合は 0 以外。それ以外の場合は 0。

解説

タブ位置を 2 ダイアログ 単位の既定のサイズに設定するには、このメンバー関数のパラメーターなしのバージョンを呼び出します。 タブ位置を 2 以外のサイズに設定するには、引数を指定してバージョンを cxEachStop 呼び出します。

タブ位置をサイズの配列に設定するには、バージョンとnTabStops引数をrgTabStops使用します。 タブ位置は、で指定された数まで、各 rgTabStops値に対して nTabStops設定されます。

メンバー関数の呼び出しに SetTabStops 応答するには、リスト ボックスがスタイルで LBS_USETABSTOPS 作成されている必要があります。

// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);

   if ((nIndex = str.Find('\t')) != -1)
      str = str.Right(nIndex);

   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));

CListBox::SetTopIndex

特定のリスト ボックス項目が確実に表示されるようにします。

int SetTopIndex(int nIndex);

パラメーター

nIndex
リスト ボックス項目の 0 から始まるインデックスを指定します。

戻り値

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

解説

指定された nIndex 項目がリスト ボックスの上部に表示されるか、最大スクロール範囲に達するまで、リスト ボックスがスクロールされます。

// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);

CListBox::VKeyToItem

リスト ボックスの親ウィンドウがリスト ボックスからメッセージを受信すると、 WM_VKEYTOITEM フレームワークによって呼び出されます。

virtual int VKeyToItem(
    UINT nKey,
    UINT nIndex);

パラメーター

nKey
ユーザーが押したキーの仮想キー コード。 標準の仮想キー コードの一覧については、 Winuser.h

nIndex
リスト ボックス キャレットの現在位置。

戻り値

それ以上操作しない場合は -2、既定のアクションの場合は 1、キーストロークの既定のアクションを実行するリスト ボックス項目のインデックスを指定する負でない数値を返します。

解説

メッセージは WM_VKEYTOITEM 、メッセージを受信 WM_KEYDOWN したときにリスト ボックスによって送信されますが、リスト ボックスが次の両方を満たしている場合にのみ送信されます。

  • スタイルが設定されています LBS_WANTKEYBOARDINPUT

  • 少なくとも 1 つの項目があります。

この関数を自分で呼び出すべきではありません。 キーボード メッセージの独自のカスタム処理を提供するには、この関数をオーバーライドします。

オーバーライドが実行したアクションをフレームワークに通知するには、値を返す必要があります。 戻り値 - 2 は、アプリケーションが項目の選択のすべての側面を処理し、リスト ボックスによるそれ以上のアクションは必要ないことを示します。 2 を返す前に、選択を設定するか、キャレットまたはその両方を移動できます。 選択範囲を設定するには、次の値を使用 SetCurSel します SetSel。 キャレットを移動するには、SetCaretIndex

戻り値 - 1 は、リスト ボックスがキーストロークに応答して既定のアクションを実行する必要があることを示します。既定の実装では、- 1 が返されます。

戻り値が 0 以上の場合は、リスト ボックス内の項目のインデックスを指定し、リスト ボックスが指定された項目に対してキーストロークの既定のアクションを実行する必要があることを示します。

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
   // On key up, move the caret up one item.
   if ((nKey == VK_UP) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On key down, move the caret down one item.
   else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -2;
}

関連項目

MFC サンプル CTRLTEST
CWnd クラス
階層図
CWnd クラス
CButton クラス
CComboBox クラス
CEdit クラス
CScrollBar クラス
CStatic クラス