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
して、ユーザーが親ウィンドウを閉じるときに破棄する必要があります。
オブジェクトにメモリを割り当てる場合は、デストラクターをCListBox
CListBox
オーバーライドして割り当てを破棄します。
継承階層
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_NCCREATE
、 WM_CREATE
、、 WM_NCCALCSIZE
、、および WM_GETMINMAXINFO
メッセージを送信します。
これらのメッセージは、基底クラスの 、、、およびOnGetMinMaxInfo
メンバー関数によって既定でCWnd
処理されます。 OnNcCalcSize
OnCreate
OnNcCreate
既定のメッセージ処理を拡張するには、クラスを 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
構造体のメンバーはitemState
、DRAWITEMSTRUCT
実行する描画アクションを定義します。
既定では、このメンバー関数は何も行いません。 所有者描画 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 値は呼び出し dwItemData
の SetItemData
パラメーターでした。
例
// 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
の関数 InsertString
と Dir
関数に可能な限り短い時間がかかります。 パラメーターには見積もりを使用できます。 過大評価すると、追加のメモリが割り当てられます。過小評価する場合は、事前に割り当てられた金額を超えるアイテムに対して通常の割り当てが使用されます。
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
選択範囲を設定する方法を指定します。 ある場合 bSelect
は TRUE
、文字列が選択され、強調表示されます。場合 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
選択範囲を設定する方法を指定します。 ある場合 bSelect
は TRUE
、文字列が選択され、強調表示されます。場合 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
クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示