CListBox
-Klasse
Stellt die Funktionalität eines Windows-Listenfelds bereit.
Syntax
class CListBox : public CWnd
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CListBox::CListBox |
Erstellt ein CListBox -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CListBox::AddString |
Fügt einem Listenfeld eine Zeichenfolge hinzu. |
CListBox::CharToItem |
Überschreiben, um eine benutzerdefinierte WM_CHAR Behandlung für Besitzer-Zeichnen-Listenfelder bereitzustellen, für die keine Zeichenfolgen vorhanden sind. |
CListBox::CompareItem |
Wird vom Framework aufgerufen, um die Position eines neuen Elements in einem sortierten Listenfeld für Besitzer-Zeichnen zu bestimmen. |
CListBox::Create |
Erstellt das Windows-Listenfeld und fügt es an das CListBox Objekt an. |
CListBox::DeleteItem |
Wird vom Framework aufgerufen, wenn der Benutzer ein Element aus einem Listenfeld "Besitzer zeichnen" löscht. |
CListBox::DeleteString |
Löscht eine Zeichenfolge aus einem Listenfeld. |
CListBox::Dir |
Fügt Dateinamen, Laufwerke oder beide aus dem aktuellen Verzeichnis zu einem Listenfeld hinzu. |
CListBox::DrawItem |
Wird vom Framework aufgerufen, wenn sich ein visueller Aspekt eines Besitzer-Zeichnen-Listenfelds ändert. |
CListBox::FindString |
Sucht in einem Listenfeld nach einer Zeichenfolge. |
CListBox::FindStringExact |
Sucht die erste Listenfeldzeichenfolge, die einer angegebenen Zeichenfolge entspricht. |
CListBox::GetAnchorIndex |
Ruft den nullbasierten Index des aktuellen Ankerelements in einem Listenfeld ab. |
CListBox::GetCaretIndex |
Bestimmt den Index des Elements, das das Fokusrechteck in einem Listenfeld mit Mehrfachauswahl aufweist. |
CListBox::GetCount |
Gibt die Anzahl der Zeichenfolgen in einem Listenfeld zurück. |
CListBox::GetCurSel |
Gibt den nullbasierten Index der aktuell ausgewählten Zeichenfolge in einem Listenfeld zurück. |
CListBox::GetHorizontalExtent |
Gibt die Breite in Pixeln zurück, in denen ein Listenfeld horizontal gescrollt werden kann. |
CListBox::GetItemData |
Gibt einen Wert zurück, der dem Listenfeldelement zugeordnet ist. |
CListBox::GetItemDataPtr |
Gibt einen Zeiger auf ein Listenfeldelement zurück. |
CListBox::GetItemHeight |
Bestimmt die Höhe von Elementen in einem Listenfeld. |
CListBox::GetItemRect |
Gibt das umgebende Rechteck des Listenfeldelements zurück, wie es derzeit angezeigt wird. |
CListBox::GetListBoxInfo |
Ruft die Anzahl der Elemente pro Spalte ab. |
CListBox::GetLocale |
Ruft den Gebietsschemabezeichner für ein Listenfeld ab. |
CListBox::GetSel |
Gibt den Auswahlstatus eines Listenfeldelements zurück. |
CListBox::GetSelCount |
Gibt die Anzahl der Zeichenfolgen zurück, die derzeit in einem Listenfeld mit Mehrfachauswahl ausgewählt sind. |
CListBox::GetSelItems |
Gibt die Indizes der Zeichenfolgen zurück, die derzeit in einem Listenfeld ausgewählt sind. |
CListBox::GetText |
Kopiert ein Listenfeldelement in einen Puffer. |
CListBox::GetTextLen |
Gibt die Länge in Byte eines Listenfeldelements zurück. |
CListBox::GetTopIndex |
Gibt den Index der ersten sichtbaren Zeichenfolge in einem Listenfeld zurück. |
CListBox::InitStorage |
Stellt Speicherblöcke für Listenfeldelemente und Zeichenfolgen vor. |
CListBox::InsertString |
Fügt eine Zeichenfolge an einer bestimmten Position in ein Listenfeld ein. |
CListBox::ItemFromPoint |
Gibt den Index des Listenfeldelements zurück, das einem Punkt am nächsten liegt. |
CListBox::MeasureItem |
Wird vom Framework aufgerufen, wenn ein Besitzer-Zeichnen-Listenfeld erstellt wird, um Listenfelddimensionen zu bestimmen. |
CListBox::ResetContent |
Löscht alle Einträge aus einem Listenfeld. |
CListBox::SelectString |
Sucht nach einer Zeichenfolge in einem Listenfeld mit einer Auswahl und wählt sie aus. |
CListBox::SelItemRange |
Markiert oder deaktiviert einen Bereich von Zeichenfolgen in einem Listenfeld mit mehrfacher Auswahl. |
CListBox::SetAnchorIndex |
Legt den Anker in einem Listenfeld für Mehrfachauswahl fest, um eine erweiterte Auswahl zu beginnen. |
CListBox::SetCaretIndex |
Legt das Fokusrechteck auf das Element am angegebenen Index in einem Listenfeld mit Mehrfachauswahl fest. |
CListBox::SetColumnWidth |
Legt die Spaltenbreite eines mehrspaltigen Listenfelds fest. |
CListBox::SetCurSel |
Wählt eine Listenfeldzeichenfolge aus. |
CListBox::SetHorizontalExtent |
Legt die Breite in Pixeln fest, in denen ein Listenfeld horizontal gescrollt werden kann. |
CListBox::SetItemData |
Legt einen Wert fest, der dem Listenfeldelement zugeordnet ist. |
CListBox::SetItemDataPtr |
Legt einen Zeiger auf das Listenfeldelement fest. |
CListBox::SetItemHeight |
Legt die Höhe von Elementen in einem Listenfeld fest. |
CListBox::SetLocale |
Legt den Gebietsschemabezeichner für ein Listenfeld fest. |
CListBox::SetSel |
Wählt ein Listenfeldelement in einem Listenfeld-Listenfeld aus oder deaktiviert es. |
CListBox::SetTabStops |
Legt die Tabstopppositionen in einem Listenfeld fest. |
CListBox::SetTopIndex |
Legt den nullbasierten Index der ersten sichtbaren Zeichenfolge in einem Listenfeld fest. |
CListBox::VKeyToItem |
Überschreiben, um benutzerdefinierte WM_KEYDOWN Behandlung für Listenfelder mit dem LBS_WANTKEYBOARDINPUT Formatvorlagensatz bereitzustellen. |
Hinweise
In einem Listenfeld wird eine Liste von Elementen angezeigt, z. B. Dateinamen, die der Benutzer anzeigen und auswählen kann.
In einem Listenfeld mit einer Auswahl kann der Benutzer nur ein Element auswählen. In einem Listenfeld mit Mehrfachauswahl kann ein Elementbereich ausgewählt werden. Wenn der Benutzer ein Element auswählt, wird es hervorgehoben, und das Listenfeld sendet eine Benachrichtigung an das übergeordnete Fenster.
Sie können ein Listenfeld entweder aus einer Dialogfeldvorlage oder direkt in Ihrem Code erstellen. Um es direkt zu erstellen, erstellen Sie das CListBox
Objekt, und rufen Sie dann die Create
Memberfunktion auf, um das Windows-Listenfeld-Steuerelement zu erstellen und es an das CListBox
Objekt anzufügen. Um ein Listenfeld in einer Dialogfeldvorlage zu verwenden, deklarieren Sie eine Listenfeldvariable in Ihrer Dialogfeldklasse, und verwenden Sie DDX_Control
dann die Funktion Ihrer Dialogfeldklasse DoDataExchange
, um die Membervariable mit dem Steuerelement zu verbinden. (Dies geschieht automatisch, wenn Sie ihrer Dialogfeldklasse eine Steuerelementvariable hinzufügen.)
Die Konstruktion kann ein einstufiger Prozess in einer Klasse sein, die von CListBox
. Schreiben Sie einen Konstruktor für die abgeleitete Klasse und den Aufruf Create
innerhalb des Konstruktors.
Wenn Sie Windows-Benachrichtigungen behandeln möchten, die von einem Listenfeld an das übergeordnete Element gesendet werden (in der Regel eine von ihnen abgeleitete CDialog
Klasse), fügen Sie der übergeordneten Klasse für jede Nachricht eine Elementfunktion für nachrichtenzuordnungs- und message-handler-member hinzu.
Jeder Nachrichtenzuordnungseintrag hat die folgende Form:
ON_Notification( id, memberFxn )
dabei id
wird die untergeordnete Fenster-ID des Listenfeld-Steuerelements angegeben, das die Benachrichtigung sendet, und memberFxn
der Name der übergeordneten Elementfunktion, die Sie zum Behandeln der Benachrichtigung geschrieben haben.
Der Funktionsprototyp des übergeordneten Elements lautet wie folgt:
afx_msg void memberFxn( );
Nachfolgend finden Sie eine Liste potenzieller Nachrichtenzuordnungseinträge und eine Beschreibung der Fälle, in denen sie an das übergeordnete Element gesendet werden:
ON_LBN_DBLCLK
Der Benutzer doppelklicken auf eine Zeichenfolge in einem Listenfeld. Nur ein Listenfeld mit derLBS_NOTIFY
Formatvorlage sendet diese Benachrichtigung.ON_LBN_ERRSPACE
Das Listenfeld kann nicht genügend Arbeitsspeicher zuweisen, um die Anforderung zu erfüllen.ON_LBN_KILLFOCUS
Das Listenfeld verliert den Eingabefokus.ON_LBN_SELCANCEL
Die aktuelle Listenfeldauswahl wird abgebrochen. Diese Nachricht wird nur gesendet, wenn ein Listenfeld dieLBS_NOTIFY
Formatvorlage aufweist.ON_LBN_SELCHANGE
Die Auswahl im Listenfeld wurde geändert. Diese Benachrichtigung wird nicht gesendet, wenn die Auswahl von derCListBox::SetCurSel
Memberfunktion geändert wird. Diese Benachrichtigung gilt nur für ein Listenfeld mit derLBS_NOTIFY
Formatvorlage. DieLBN_SELCHANGE
Benachrichtigung wird für ein Listenfeld mit Mehrfachauswahl gesendet, wenn der Benutzer eine Pfeiltaste drückt, auch wenn sich die Auswahl nicht ändert.ON_LBN_SETFOCUS
Das Listenfeld empfängt den Eingabefokus.ON_WM_CHARTOITEM
Ein Listenfeld mit Besitzer-Zeichnen, das keine Zeichenfolgen enthält, empfängt eineWM_CHAR
Nachricht.ON_WM_VKEYTOITEM
Ein Listenfeld mit derLBS_WANTKEYBOARDINPUT
Formatvorlage empfängt eineWM_KEYDOWN
Nachricht.
Wenn Sie ein CListBox
Objekt in einem Dialogfeld (über eine Dialogressource) erstellen, wird das CListBox
Objekt automatisch zerstört, wenn der Benutzer das Dialogfeld schließt.
Wenn Sie ein Objekt innerhalb eines CListBox
Fensters erstellen, müssen Sie das CListBox
Objekt möglicherweise zerstören. Wenn Sie das CListBox
Objekt auf dem Stapel erstellen, wird es automatisch zerstört. Wenn Sie das CListBox
Objekt auf dem Heap mithilfe der new
Funktion erstellen, müssen Sie das Objekt aufrufen delete
, um es zu zerstören, wenn der Benutzer das übergeordnete Fenster schließt.
Wenn Sie speicher CListBox
im Objekt zuordnen, überschreiben Sie den CListBox
Destruktor, um die Zuordnung zu löschen.
Vererbungshierarchie
CListBox
Anforderungen
Header: afxwin.h
CListBox::AddString
Fügt einem Listenfeld eine Zeichenfolge hinzu.
int AddString(LPCTSTR lpszItem);
Parameter
lpszItem
Verweist auf die mit Null beendete Zeichenfolge, die hinzugefügt werden soll.
Rückgabewert
Der nullbasierte Index für die Zeichenfolge im Listenfeld. Der Rückgabewert ist, wenn ein Fehler auftritt. Der Rückgabewert ist LB_ERR
LB_ERRSPACE
, wenn nicht genügend Speicherplatz zum Speichern der neuen Zeichenfolge verfügbar ist.
Hinweise
Wenn das Listenfeld nicht mit der LBS_SORT
Formatvorlage erstellt wurde, wird die Zeichenfolge am Ende der Liste hinzugefügt. Andernfalls wird die Zeichenfolge in die Liste eingefügt, und die Liste wird sortiert. Wenn das Listenfeld mit der LBS_SORT
Formatvorlage, aber nicht mit der LBS_HASSTRINGS
Formatvorlage erstellt wurde, sortiert das Framework die Liste nach einem oder mehreren Aufrufen der CompareItem
Memberfunktion.
Dient InsertString
zum Einfügen einer Zeichenfolge an eine bestimmte Position innerhalb des Listenfelds.
Beispiel
// 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
Wird vom Framework aufgerufen, wenn das übergeordnete Fenster des Listenfelds eine WM_CHARTOITEM
Nachricht aus dem Listenfeld empfängt.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Parameter
nKey
Der ANSI-Code des Zeichens, das der Benutzer eingegeben hat.
nIndex
Die aktuelle Position des Listenfeld-Caret.
Rückgabewert
Gibt - 1 oder - 2 für keine weitere Aktion oder eine nichtnegative Zahl zurück, um einen Index eines Listenfeldelements anzugeben, für das die Standardaktion für den Tastenanschlag ausgeführt werden soll. Die Standardimplementierung gibt - 1 zurück.
Hinweise
Die WM_CHARTOITEM
Nachricht wird vom Listenfeld gesendet, wenn sie eine WM_CHAR
Nachricht empfängt, aber nur, wenn das Listenfeld alle diese Kriterien erfüllt:
Ist ein Listenfeld für Besitzer-Zeichnen.
Verfügt nicht über den
LBS_HASSTRINGS
Formatvorlagensatz.Verfügt über mindestens ein Element.
Sie sollten diese Funktion niemals selbst aufrufen. Überschreiben Sie diese Funktion, um ihre eigene benutzerdefinierte Behandlung von Tastaturnachrichten bereitzustellen.
In Ihrer Außerkraftsetzung müssen Sie einen Wert zurückgeben, um dem Framework mitzuteilen, welche Aktion Sie ausgeführt haben. Ein Rückgabewert von - 1 oder - 2 gibt an, dass Sie alle Aspekte der Auswahl des Elements behandelt haben und keine weitere Aktion durch das Listenfeld erfordert. Bevor Sie - 1 oder - 2 zurückgeben, können Sie die Markierung festlegen oder das Caret oder beides verschieben. Um die Auswahl festzulegen, verwenden SetCurSel
oder SetSel
. Um das Caret zu verschieben, verwenden Sie SetCaretIndex
.
Ein Rückgabewert von 0 oder höher gibt den Index eines Elements im Listenfeld an und gibt an, dass das Listenfeld die Standardaktion für die Tastatureingabe für das angegebene Element ausführen soll.
Beispiel
// 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
Erstellt ein CListBox
-Objekt.
CListBox();
Hinweise
Sie erstellen ein CListBox
Objekt in zwei Schritten. Rufen Sie zuerst den Konstruktor auf, und rufen Sie ihn dann aufCreate
, wodurch das Windows-Listenfeld initialisiert und an die CListBox
Konstruktor ClistBox
angefügt wird.
Beispiel
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
Wird vom Framework aufgerufen, um die relative Position eines neuen Elements in einem sortierten Listenfeld für Besitzer-Zeichnen zu bestimmen.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Parameter
lpCompareItemStruct
Ein langer Zeiger auf eine COMPAREITEMSTRUCT
Struktur.
Rückgabewert
Gibt die relative Position der beiden in der COMPAREITEMSTRUCT
Struktur beschriebenen Elemente an. Dabei kann es sich um einen der folgenden Werte handeln:
Wert | Bedeutung |
---|---|
-1 | Element 1 sortiert vor Element 2. |
0 | Element 1 und Element 2 sortieren gleich. |
1 | Element 1 sortiert nach Element 2. |
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnCompareItem
for a description of the COMPAREITEMSTRUCT
structure.
Hinweise
Standardmäßig führt diese Memberfunktion nichts aus. Wenn Sie ein Listenfeld "Besitzer-Zeichnen" mit der LBS_SORT
Formatvorlage erstellen, müssen Sie diese Memberfunktion außer Kraft setzen, um das Framework beim Sortieren neuer Elemente zu unterstützen, die dem Listenfeld hinzugefügt wurden.
Beispiel
// 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
Erstellt das Windows-Listenfeld und fügt es an das CListBox
Objekt an.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parameter
dwStyle
Gibt die Formatvorlage des Listenfelds an. Wenden Sie eine beliebige Kombination von Listenfeldformatvorlagen auf das Feld an.
rect
Gibt die Größe und Position des Listenfelds an. Kann ein CRect
Objekt oder eine RECT
Struktur sein.
pParentWnd
Gibt das übergeordnete Fenster des Listenfelds an (in der Regel ein CDialog
Objekt). Es darf nicht sein NULL
.
nID
Gibt die Steuerelement-ID des Listenfelds an.
Rückgabewert
Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).
Hinweise
Sie erstellen ein CListBox
Objekt in zwei Schritten. Rufen Sie zuerst den Konstruktor auf, und rufen Sie ihn dann auf Create
, wodurch das Windows-Listenfeld initialisiert und an das CListBox
Objekt angefügt wird.
Bei Create
Ausführung sendet Windows die WM_NCCREATE
Nachrichten , WM_CREATE
, WM_NCCALCSIZE
und WM_GETMINMAXINFO
die Nachrichten an das Listenfeld-Steuerelement.
Diese Nachrichten werden standardmäßig von den OnNcCreate
Funktionen , OnCreate
, , OnNcCalcSize
und OnGetMinMaxInfo
Member in der CWnd
Basisklasse behandelt. Um die Standardmäßige Nachrichtenbehandlung zu erweitern, leiten Sie eine Klasse ab CListBox
, fügen Sie der neuen Klasse eine Nachrichtenzuordnung hinzu, und überschreiben Sie die vorherigen Nachrichtenhandler-Memberfunktionen. Überschreiben OnCreate
Sie z. B. die erforderliche Initialisierung für eine neue Klasse.
Wenden Sie die folgenden Fensterformatvorlagen auf ein Listenfeld-Steuerelement an.
WS_CHILD
ImmerWS_VISIBLE
GewöhnlichWS_DISABLED
SeltenWS_VSCROLL
So fügen Sie eine vertikale Bildlaufleiste hinzuWS_HSCROLL
So fügen Sie eine horizontale Bildlaufleiste hinzuWS_GROUP
So gruppieren Sie SteuerelementeWS_TABSTOP
So lassen Sie die Tabulatortaste für dieses Steuerelement zu
Beispiel
// 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
Wird vom Framework aufgerufen, wenn der Benutzer ein Element aus einem Besitzer-Draw-Objekt CListBox
löscht oder das Listenfeld zerstört.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parameter
lpDeleteItemStruct
Ein langer Zeiger auf eine Windows-Struktur DELETEITEMSTRUCT
, die Informationen zum gelöschten Element enthält.
Hinweise
Bei der Standardimplementierung dieser Funktion wird keine Aktion ausgeführt. Überschreiben Sie diese Funktion, um ein Listenfeld für Besitzer-Zeichnen nach Bedarf neu zu zeichnen.
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnDeleteItem
for a description of the DELETEITEMSTRUCT
structure.
Beispiel
// 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
Löscht das Element in position nIndex
aus dem Listenfeld.
int DeleteString(UINT nIndex);
Parameter
nIndex
Gibt den nullbasierten Index der zu löschenden Zeichenfolge an.
Rückgabewert
Eine Anzahl der Zeichenfolgen, die in der Liste verbleiben. Der Rückgabewert ist LB_ERR
, wenn nIndex
ein Index größer als die Anzahl der Elemente in der Liste ist.
Hinweise
Alle elemente, die jetzt folgen, nIndex
bewegen sich um eine Position nach unten. Wenn z. B. ein Listenfeld zwei Elemente enthält, bewirkt das Löschen des ersten Elements, dass sich das verbleibende Element jetzt an der ersten Position befindet. nIndex
=0 für das Element an der ersten Position.
Beispiel
// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Fügt eine Liste von Dateinamen, Laufwerken oder beides zu einem Listenfeld hinzu.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parameter
attr
Dabei kann es sich um eine beliebige Kombination der enum
in CFile::GetStatus
, oder eine beliebige Kombination der folgenden Werte handeln:
Wert | Bedeutung |
---|---|
0x0000 | Die Datei kann ausgelesen oder in diese geschrieben werden. |
0x0001 | Datei kann gelesen, aber nicht in. |
0x0002 | Die Datei ist ausgeblendet und wird nicht in einer Verzeichnisauflistung angezeigt. |
0x0004 | Datei ist eine Systemdatei. |
0x0010 | Der durch lpszWildCard die Angabe angegebene Name gibt ein Verzeichnis an. |
0x0020 | Die Datei wurde archiviert. |
0x4000 | Schließen Sie alle Laufwerke ein, die dem namen entsprechen, der durch lpszWildCard . |
0x8000 | Exklusive Kennzeichnung. Wenn das exklusive Flag festgelegt ist, werden nur Dateien des angegebenen Typs aufgelistet. Andernfalls werden Dateien des angegebenen Typs zusätzlich zu "normalen" Dateien aufgeführt. |
lpszWildCard
Verweist auf eine Dateispezifikationszeichenfolge. Die Zeichenfolge kann Wildcards enthalten (z. B. *.*).
Rückgabewert
Der nullbasierte Index des Nachnamens, der der Liste hinzugefügt wurde. Der Rückgabewert ist, wenn ein Fehler auftritt. Der Rückgabewert ist LB_ERR
LB_ERRSPACE
, wenn nicht genügend Speicherplatz zum Speichern der neuen Zeichenfolgen verfügbar ist.
Beispiel
// 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
Wird vom Framework aufgerufen, wenn sich ein visueller Aspekt eines Besitzer-Zeichnen-Listenfelds ändert.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameter
lpDrawItemStruct
Ein langer Zeiger auf eine DRAWITEMSTRUCT
Struktur, die Informationen zum erforderlichen Zeichnungstyp enthält.
Hinweise
Die itemAction
Elemente itemState
der DRAWITEMSTRUCT
Struktur definieren die Zeichnungsaktion, die ausgeführt werden soll.
Standardmäßig führt diese Memberfunktion nichts aus. Überschreiben Sie diese Memberfunktion, um die Zeichnung für ein Besitzer-Draw-Objekt CListBox
zu implementieren. Die Anwendung sollte alle GDI-Objekte (Graphics Device Interface) wiederherstellen, die für den angezeigten Kontext ausgewählt lpDrawItemStruct
sind, bevor diese Memberfunktion beendet wird.
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnDrawItem
for a description of the DRAWITEMSTRUCT
structure.
Beispiel
// 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
Sucht die erste Zeichenfolge in einem Listenfeld, das das angegebene Präfix enthält, ohne die Listenfeldauswahl zu ändern.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) const;
Parameter
nStartAfter
Enthält den nullbasierten Index des Elements, bevor das erste Element durchsucht werden soll. Wenn die Suche das Ende des Listenfelds erreicht, wird sie vom oberen Rand des Listenfelds zurück zum durch nStartAfter
die Liste angegebenen Element fortgesetzt. Wenn nStartAfter
-1 ist, wird das gesamte Listenfeld von Anfang an durchsucht.
lpszItem
Verweist auf die mit Null beendete Zeichenfolge, die das präfix enthält, nach dem gesucht werden soll. Die Suche ist unabhängig, sodass diese Zeichenfolge eine beliebige Kombination aus Groß- und Kleinbuchstaben enthalten kann.
Rückgabewert
Der nullbasierte Index des übereinstimmenden Elements oder LB_ERR
wenn die Suche nicht erfolgreich war.
Hinweise
Verwenden Sie die SelectString
Memberfunktion, um eine Zeichenfolge zu suchen und auszuwählen.
Beispiel
// 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
Sucht die erste Listenfeldzeichenfolge, die der in lpszFind
.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Parameter
nIndexStart
Gibt den nullbasierten Index des Elements an, bevor das erste Element durchsucht werden soll. Wenn die Suche das Ende des Listenfelds erreicht, wird sie vom oberen Rand des Listenfelds zurück zum durch nIndexStart
die Liste angegebenen Element fortgesetzt. Wenn nIndexStart
-1 ist, wird das gesamte Listenfeld von Anfang an durchsucht.
lpszFind
Verweist auf die mit Null beendete Zeichenfolge, nach der gesucht werden soll. Diese Zeichenfolge kann einen vollständigen Dateinamen enthalten, einschließlich der Erweiterung. Bei der Suche wird die Groß-/Kleinschreibung nicht beachtet, sodass die Zeichenfolge eine beliebige Kombination aus Groß- und Kleinbuchstaben enthalten kann.
Rückgabewert
Der Index des übereinstimmenden Elements oder LB_ERR
wenn die Suche nicht erfolgreich war.
Hinweise
Wenn das Listenfeld mit einem Besitzer-Zeichnen-Format erstellt wurde, aber ohne formatvorlage LBS_HASSTRINGS
, versucht die FindStringExact
Memberfunktion, den Doubleword-Wert mit dem Wert von lpszFind
.
Beispiel
// 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
Ruft den nullbasierten Index des aktuellen Ankerelements im Listenfeld ab.
int GetAnchorIndex() const;
Rückgabewert
Der Index des aktuellen Ankerelements, falls erfolgreich; andernfalls LB_ERR.
Hinweise
In einem Listenfeld mit Mehrfachauswahl ist das Ankerelement das erste oder letzte Element in einem Block zusammenhängender ausgewählter Elemente.
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::SetAnchorIndex
.
CListBox::GetCaretIndex
Bestimmt den Index des Elements, das das Fokusrechteck in einem Listenfeld mit Mehrfachauswahl aufweist.
int GetCaretIndex() const;
Rückgabewert
Der nullbasierte Index des Elements, das das Fokusrechteck in einem Listenfeld enthält. Wenn es sich bei dem Listenfeld um ein Listenfeld mit einer Auswahl handelt, ist der Rückgabewert der Index des ausgewählten Elements, falls vorhanden.
Hinweise
Das Element kann ausgewählt oder nicht ausgewählt werden.
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::SetCaretIndex
.
CListBox::GetCount
Ruft die Anzahl der Elemente in einem Listenfeld ab.
int GetCount() const;
Rückgabewert
Die Anzahl der Elemente im Listenfeld oder LB_ERR
wenn ein Fehler auftritt.
Hinweise
Die zurückgegebene Anzahl ist eine größer als der Indexwert des letzten Elements (der Index ist nullbasiert).
Beispiel
// 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
Ruft den nullbasierten Index des aktuell ausgewählten Elements (sofern vorhanden) in einem Listenfeld mit einer Auswahl ab.
int GetCurSel() const;
Rückgabewert
Der nullbasierte Index des aktuell ausgewählten Elements, wenn es sich um ein Listenfeld mit einer Auswahl handelt. LB_ERR
Wenn derzeit kein Element ausgewählt ist.
In einem Listenfeld mit Mehrfachauswahl wird der Index des Elements mit dem Fokus angezeigt.
Hinweise
Rufen Sie GetCurSel
kein Listenfeld für Mehrfachauswahl auf. Verwenden Sie stattdessen CListBox::GetSelItems
.
Beispiel
// 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
Ruft aus dem Listenfeld die Breite in Pixeln ab, um die es horizontal gescrollt werden kann.
int GetHorizontalExtent() const;
Rückgabewert
Die bildlauffähige Breite des Listenfelds in Pixel.
Hinweise
Dies gilt nur, wenn das Listenfeld über eine horizontale Bildlaufleiste verfügt.
Beispiel
// 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
Ruft den vom Anwendung bereitgestellten Doubleword-Wert ab, der dem angegebenen Listenfeldelement zugeordnet ist.
DWORD_PTR GetItemData(int nIndex) const;
Parameter
nIndex
Gibt den nullbasierten Index des Elements im Listenfeld an.
Rückgabewert
Der dem Element zugeordnete Wert oder LB_ERR
wenn ein Fehler auftritt.
Hinweise
Der Doubleword-Wert war der dwItemData
Parameter eines Aufrufs SetItemData
.
Beispiel
// 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
Ruft den vom Anwendung bereitgestellten 32-Bit-Wert ab, der dem angegebenen Listenfeldelement als Zeiger (void
*) zugeordnet ist.
void* GetItemDataPtr(int nIndex) const;
Parameter
nIndex
Gibt den nullbasierten Index des Elements im Listenfeld an.
Rückgabewert
Ruft einen Zeiger oder -1 ab, wenn ein Fehler auftritt.
Beispiel
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
Bestimmt die Höhe von Elementen in einem Listenfeld.
int GetItemHeight(int nIndex) const;
Parameter
nIndex
Gibt den nullbasierten Index des Elements im Listenfeld an. Dieser Parameter wird nur verwendet, wenn das Listenfeld die LBS_OWNERDRAWVARIABLE
Formatvorlage aufweist. Andernfalls sollte er auf 0 festgelegt werden.
Rückgabewert
Die Höhe der Elemente im Listenfeld in Pixel. Wenn das Listenfeld die LBS_OWNERDRAWVARIABLE
Formatvorlage aufweist, ist der Rückgabewert die Höhe des durch nIndex
. Wenn ein Fehler auftritt, lautet LB_ERR
der Rückgabewert .
Beispiel
// 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
Ruft die Abmessungen des Rechtecks ab, das ein Listenfeldelement begrenzt, wie es derzeit im Listenfeldfenster angezeigt wird.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parameter
nIndex
Gibt den nullbasierten Index des Elements an.
lpRect
Gibt einen langen Zeiger auf eine RECT
Struktur an, die die Clientkoordinaten des Listenfelds des Elements empfängt.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Beispiel
// 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
Ruft die Anzahl der Elemente pro Spalte ab.
DWORD GetListBoxInfo() const;
Rückgabewert
Anzahl der Elemente pro Spalte des CListBox
Objekts.
Hinweise
Diese Memberfunktion emuliert die Funktionalität der LB_GETLISTBOXINFO
Nachricht, wie im Windows SDK beschrieben.
CListBox::GetLocale
Ruft das gebietsschema ab, das vom Listenfeld verwendet wird.
LCID GetLocale() const;
Rückgabewert
Der Gebietsschemabezeichnerwert (LCID) für die Zeichenfolgen im Listenfeld.
Hinweise
Das Gebietsschema wird beispielsweise verwendet, um die Sortierreihenfolge der Zeichenfolgen in einem sortierten Listenfeld zu bestimmen.
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::SetLocale
.
CListBox::GetSel
Ruft den Auswahlstatus eines Elements ab.
int GetSel(int nIndex) const;
Parameter
nIndex
Gibt den nullbasierten Index des Elements an.
Rückgabewert
Eine positive Zahl, wenn das angegebene Element ausgewählt ist; andernfalls ist es 0. Der Rückgabewert ist LB_ERR
, wenn ein Fehler auftritt.
Hinweise
Diese Memberfunktion funktioniert sowohl mit Listenfeldern mit einfacher als auch mit mehrfacher Auswahl.
Um den Index des aktuell ausgewählten Listenfeldelements abzurufen, verwenden Sie CListBox::GetCurSel
.
Beispiel
// 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
Ruft die Gesamtanzahl der ausgewählten Elemente in einem Listenfeld mit Mehrfachauswahl ab.
int GetSelCount() const;
Rückgabewert
Die Anzahl der ausgewählten Elemente in einem Listenfeld. Wenn das Listenfeld ein Listenfeld mit einer Auswahl ist, lautet LB_ERR
der Rückgabewert .
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::GetSelItems
.
CListBox::GetSelItems
Füllt einen Puffer mit einem Array ganzzahliger Zahlen, die die Elementnummern ausgewählter Elemente in einem Listenfeld mit Mehrfachauswahl angibt.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Parameter
nMaxItems
Gibt die maximale Anzahl der ausgewählten Elemente an, deren Elementnummern im Puffer platziert werden sollen.
rgIndex
Gibt einen Zeiger auf einen Puffer an, der groß genug für die Anzahl der ganzzahligen Zahlen ist, die durch nMaxItems
.
Rückgabewert
Die tatsächliche Anzahl der Im Puffer platzierten Elemente. Wenn das Listenfeld ein Listenfeld mit einer Auswahl ist, lautet LB_ERR
der Rückgabewert .
Beispiel
// 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
Ruft eine Zeichenfolge aus einem Listenfeld ab.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Parameter
nIndex
Gibt den nullbasierten Index der abzurufenden Zeichenfolge an.
lpszBuffer
Verweist auf den Puffer, der die Zeichenfolge empfängt. Der Puffer muss über ausreichend Speicherplatz für die Zeichenfolge und ein endendes NULL-Zeichen verfügen. Die Größe der Zeichenfolge kann vorab durch Aufrufen der GetTextLen
Memberfunktion bestimmt werden.
rString
Ein Verweis auf ein CString
-Objekt.
Rückgabewert
Die Länge (in Byte) der Zeichenfolge, mit Ausnahme des endenden Nullzeichens. Wenn nIndex
kein gültiger Index angegeben wird, lautet LB_ERR
der Rückgabewert .
Hinweise
Die zweite Form dieser Memberfunktion füllt ein CString
Objekt mit dem Zeichenfolgentext aus.
Beispiel
// 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
Ruft die Länge einer Zeichenfolge in einem Listenfeldelement ab.
int GetTextLen(int nIndex) const;
Parameter
nIndex
Gibt den nullbasierten Index der Zeichenfolge an.
Rückgabewert
Die Länge der Zeichenfolge in Zeichen, mit Ausnahme des endenden Nullzeichens. Wenn nIndex
kein gültiger Index angegeben wird, lautet LB_ERR
der Rückgabewert .
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::GetText
.
CListBox::GetTopIndex
Ruft den nullbasierten Index des ersten sichtbaren Elements in einem Listenfeld ab.
int GetTopIndex() const;
Rückgabewert
Der nullbasierte Index des ersten sichtbaren Elements in einem Listenfeld, falls erfolgreich, LB_ERR
andernfalls.
Hinweise
Anfangs befindet sich Element 0 am Anfang des Listenfelds, aber wenn das Listenfeld gescrollt wird, befindet sich möglicherweise ein weiteres Element oben.
Beispiel
// 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
Ordnet Speicher zum Speichern von Listenfeldelementen zu.
int InitStorage(
int nItems,
UINT nBytes);
Parameter
nItems
Gibt die Anzahl der hinzuzufügenden Elemente an.
nBytes
Gibt die Speichermenge in Bytes an, die für Elementzeichenfolgen zugewiesen werden soll.
Rückgabewert
Bei erfolgreicher Ausführung kann die maximale Anzahl von Elementen, die im Listenfeld gespeichert werden können, bevor eine Speicherinteilung erforderlich ist, andernfalls LB_ERRSPACE
ist nicht genügend Arbeitsspeicher verfügbar.
Hinweise
Rufen Sie diese Funktion auf, bevor Sie einer großen Anzahl von Elementen hinzufügen CListBox
.
Diese Funktion beschleunigt die Initialisierung von Listenfeldern mit einer großen Anzahl von Elementen (mehr als 100). Es wird die angegebene Speichermenge vorverteilt, sodass nachfolgende AddString
, InsertString
und Dir
Funktionen die kürzeste Zeit in Anspruch nehmen. Sie können Schätzungen für die Parameter verwenden. Wenn Sie die Überschätzung überschätzen, werden zusätzlichen Arbeitsspeicher zugewiesen. wenn Sie unterschätzen, wird die normale Zuordnung für Elemente verwendet, die den vorallocated-Betrag überschreiten.
Nur Windows 95/98: Der nItems
Parameter ist auf 16-Bit-Werte beschränkt. Dies bedeutet, dass Listenfelder nicht mehr als 32.767 Elemente enthalten dürfen. Obwohl die Anzahl der Elemente eingeschränkt ist, ist die Gesamtgröße der Elemente in einem Listenfeld nur durch den verfügbaren Arbeitsspeicher begrenzt.
Beispiel
// 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
Fügt eine Zeichenfolge in das Listenfeld ein.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Parameter
nIndex
Gibt den nullbasierten Index der Position an, an der die Zeichenfolge eingefügt werden soll. Wenn dieser Parameter -1 ist, wird die Zeichenfolge am Ende der Liste hinzugefügt.
lpszItem
Zeigt auf die einzufügende nullterminierte Zeichenfolge.
Rückgabewert
Der nullbasierte Index der Position, an der die Zeichenfolge eingefügt wurde. Der Rückgabewert ist, wenn ein Fehler auftritt. Der Rückgabewert ist LB_ERR
LB_ERRSPACE
, wenn nicht genügend Speicherplatz zum Speichern der neuen Zeichenfolge verfügbar ist.
Hinweise
AddString
Im Gegensatz zur Memberfunktion InsertString
wird keine Liste mit der LBS_SORT
Formatvorlage sortiert.
Beispiel
// 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
Bestimmt das Listenfeldelement, das dem in der Datei pt
angegebenen Punkt am nächsten liegt.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Parameter
pt
Punkt, für den das nächste Element gefunden werden soll, angegeben relativ zur oberen linken Ecke des Clientbereichs des Listenfelds.
bOutside
Verweis auf eine BOOL
Variable, die festgelegt TRUE
wird, wenn pt
sich außerhalb des Clientbereichs des Listenfelds befindet, FALSE
wenn pt
sich der Clientbereich des Listenfelds befindet.
Rückgabewert
Der Index des nächstgelegenen Elements zum angegebenen pt
Punkt.
Hinweise
Mit dieser Funktion können Sie bestimmen, welches Listenfeldelement der Mauszeiger bewegt.
Beispiel
Ein Beispiel hierfür finden Sie unter CListBox::SetAnchorIndex
.
CListBox::MeasureItem
Wird vom Framework aufgerufen, wenn ein Listenfeld mit einem Besitzer-Zeichnen-Format erstellt wird.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameter
lpMeasureItemStruct
Ein langer Zeiger auf eine MEASUREITEMSTRUCT
Struktur.
Hinweise
Standardmäßig führt diese Memberfunktion nichts aus. Überschreiben Sie diese Memberfunktion, und füllen Sie die MEASUREITEMSTRUCT
Struktur aus, um Windows über die Abmessungen des Listenfelds zu informieren. Wenn das Listenfeld mit der LBS_OWNERDRAWVARIABLE
Formatvorlage erstellt wird, ruft das Framework diese Memberfunktion für jedes Element im Listenfeld auf. Andernfalls wird dieses Element nur einmal aufgerufen.
Weitere Informationen zur Verwendung des LBS_OWNERDRAWFIXED
Stils in einem Listenfeld mit Besitzer-Zeichnen, das mit der SubclassDlgItem
Memberfunktion CWnd
erstellt wurde, finden Sie in der Diskussion in Technical Note 14.
Eine Beschreibung der Struktur finden Sie unter.See CWnd::OnMeasureItem
for a description of the MEASUREITEMSTRUCT
structure.
Beispiel
// 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
Entfernt alle Elemente aus einem Listenfeld.
void ResetContent();
Beispiel
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Sucht nach einem Listenfeldelement, das der angegebenen Zeichenfolge entspricht, und wenn ein übereinstimmende Element gefunden wird, wird das Element ausgewählt.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
Parameter
nStartAfter
Enthält den nullbasierten Index des Elements, bevor das erste Element durchsucht werden soll. Wenn die Suche das Ende des Listenfelds erreicht, wird sie vom oberen Rand des Listenfelds zurück zum durch nStartAfter
die Liste angegebenen Element fortgesetzt. Wenn nStartAfter
-1 ist, wird das gesamte Listenfeld von Anfang an durchsucht.
lpszItem
Verweist auf die mit Null beendete Zeichenfolge, die das präfix enthält, nach dem gesucht werden soll. Die Suche ist unabhängig, sodass diese Zeichenfolge eine beliebige Kombination aus Groß- und Kleinbuchstaben enthalten kann.
Rückgabewert
Der Index des ausgewählten Elements, wenn die Suche erfolgreich war. Wenn die Suche nicht erfolgreich war, lautet LB_ERR
der Rückgabewert und die aktuelle Auswahl wird nicht geändert.
Hinweise
Das Listenfeld wird bei Bedarf gescrollt, um das ausgewählte Element in die Ansicht zu bringen.
Diese Memberfunktion kann nicht mit einem Listenfeld verwendet werden, das die LBS_MULTIPLESEL
Formatvorlage aufweist.
Ein Element wird nur ausgewählt, wenn die Anfangszeichen (vom Anfangspunkt) mit den Zeichen in der Zeichenfolge übereinstimmen, die durch lpszItem
.
Verwenden Sie die FindString
Memberfunktion, um eine Zeichenfolge zu finden, ohne das Element auszuwählen.
Beispiel
// 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
Markiert mehrere aufeinander folgende Elemente in einem Listenfeld mit mehrfacher Auswahl.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Parameter
bSelect
Gibt an, wie die Auswahl festgelegt wird. Wenn ja, wird TRUE
die Zeichenfolge ausgewählt und hervorgehoben. WennFALSE
bSelect
, wird die Hervorhebung entfernt, und die Zeichenfolge wird nicht mehr ausgewählt.
nFirstItem
Gibt den nullbasierten Index des ersten festzulegenden Elements an.
nLastItem
Gibt den nullbasierten Index des letzten festzulegenden Elements an.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Hinweise
Verwenden Sie diese Memberfunktion nur für Listenfelder mit mehrfacher Auswahl. Wenn Sie nur ein Element in einem Listenfeld mit mehrfacher Auswahl auswählen müssen , d. h. falls nFirstItem
gleich nLastItem
, rufen Sie stattdessen die SetSel
Memberfunktion auf.
Beispiel
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Legt den Anker in einem Listenfeld für Mehrfachauswahl fest, um eine erweiterte Auswahl zu beginnen.
void SetAnchorIndex(int nIndex);
Parameter
nIndex
Gibt den nullbasierten Index des Listenfeldelements an, das der Anker ist.
Hinweise
In einem Listenfeld mit Mehrfachauswahl ist das Ankerelement das erste oder letzte Element in einem Block zusammenhängender ausgewählter Elemente.
Beispiel
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
Legt das Fokusrechteck auf das Element am angegebenen Index in einem Listenfeld mit Mehrfachauswahl fest.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Parameter
nIndex
Gibt den nullbasierten Index des Elements an, um das Fokusrechteck im Listenfeld zu erhalten.
bScroll
Wenn dieser Wert 0 ist, wird das Element so lange gescrollt, bis es vollständig sichtbar ist. Wenn dieser Wert nicht 0 ist, wird das Element scrollen, bis es mindestens teilweise sichtbar ist.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Hinweise
Wenn das Element nicht sichtbar ist, wird es in die Ansicht gescrollt.
Beispiel
// 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
Legt die Breite in Pixeln aller Spalten in einem mehrspaltigen Listenfeld fest (erstellt mit der LBS_MULTICOLUMN
Formatvorlage).
void SetColumnWidth(int cxWidth);
Parameter
cxWidth
Gibt die Breite in Pixeln aller Spalten an.
Beispiel
// 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
Wählt eine Zeichenfolge aus und scrollt bei Bedarf in die Ansicht.
int SetCurSel(int nSelect);
Parameter
nSelect
Gibt den nullbasierten Index der Zeichenfolge an, die ausgewählt werden soll. Wenn nSelect
-1 ist, ist das Listenfeld so eingestellt, dass keine Auswahl vorhanden ist.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Hinweise
Wenn die neue Zeichenfolge ausgewählt ist, entfernt das Listenfeld die Hervorhebung aus der zuvor ausgewählten Zeichenfolge.
Verwenden Sie diese Memberfunktion nur für Listenfelder mit einer Auswahl.
Um eine Auswahl in einem Listenfeld mit mehrfacher Auswahl festzulegen oder zu entfernen, verwenden Sie CListBox::SetSel
.
Beispiel
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Legt die Breite in Pixel fest, um die ein Listenfeld horizontal gescrollt werden kann.
void SetHorizontalExtent(int cxExtent);
Parameter
cxExtent
Gibt die Anzahl der Pixel an, um die das Listenfeld horizontal scrollen kann.
Hinweise
Wenn die Größe des Listenfelds kleiner als dieser Wert ist, führt die horizontale Bildlaufleiste einen horizontalen Bildlauf durch Elemente im Listenfeld aus. Wenn das Listenfeld so groß oder größer als dieser Wert ist, wird die horizontale Bildlaufleiste ausgeblendet.
Um auf einen Aufruf SetHorizontalExtent
zu reagieren, muss das Listenfeld mit der WS_HSCROLL
Formatvorlage definiert worden sein.
Diese Memberfunktion ist für mehrspaltige Listenfelder nicht nützlich. Rufen Sie für mehrspaltige Listenfelder die SetColumnWidth
Memberfunktion auf.
Beispiel
// 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
Legt einen Wert fest, der dem angegebenen Element in einem Listenfeld zugeordnet ist.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parameter
nIndex
Gibt den nullbasierten Index des Elements an.
dwItemData
Gibt den Wert an, der dem Element zugeordnet werden soll.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Beispiel
// 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
Legt den dem angegebenen Element in einem Listenfeld zugeordneten 32-Bit-Wert auf den angegebenen Zeiger ( void
*) fest.
int SetItemDataPtr(
int nIndex,
void* pData);
Parameter
nIndex
Gibt den nullbasierten Index des Elements an.
pData
Gibt den Zeiger an, der dem Element zugeordnet werden soll.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Hinweise
Dieser Zeiger bleibt gültig für die Lebensdauer des Listenfelds, auch wenn sich die relative Position des Elements innerhalb des Listenfelds ändern kann, wenn Elemente hinzugefügt oder entfernt werden. Daher kann sich der Index des Elements innerhalb des Felds ändern, aber der Zeiger bleibt zuverlässig.
Beispiel
// 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
Legt die Höhe von Elementen in einem Listenfeld fest.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parameter
nIndex
Gibt den nullbasierten Index des Elements im Listenfeld an. Dieser Parameter wird nur verwendet, wenn das Listenfeld die LBS_OWNERDRAWVARIABLE
Formatvorlage aufweist. Andernfalls sollte er auf 0 festgelegt werden.
cyItemHeight
Gibt die Höhe des Elements in Pixel an.
Rückgabewert
LB_ERR
wenn der Index oder die Höhe ungültig ist.
Hinweise
Wenn das Listenfeld die LBS_OWNERDRAWVARIABLE
Formatvorlage aufweist, legt diese Funktion die Höhe des durch nIndex
. Andernfalls legt diese Funktion die Höhe aller Elemente im Listenfeld fest.
Beispiel
// 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
Legt den Gebietsschemabezeichner für dieses Listenfeld fest.
LCID SetLocale(LCID nNewLocale);
Parameter
nNewLocale
Der neue LCID-Wert (Locale Identifier), der für das Listenfeld festgelegt werden soll.
Rückgabewert
Der vorherige Gebietsschemabezeichnerwert (LCID) für dieses Listenfeld.
Hinweise
Wird SetLocale
das Standardgebietsschema nicht aufgerufen, wird das Standardgebietsschema vom System abgerufen. Dieses Systemstandardgebietsschema kann mithilfe der regionalen (oder internationalen) Anwendung Systemsteuerung geändert werden.
Beispiel
// 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
Wählt eine Zeichenfolge in einem Listenfeld mit mehrfacher Auswahl aus.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Parameter
nIndex
Enthält den nullbasierten Index der festzulegenden Zeichenfolge. Wenn -1, wird die Auswahl je nach Wert bSelect
von allen Zeichenfolgen zu allen Zeichenfolgen hinzugefügt oder daraus entfernt.
bSelect
Gibt an, wie die Auswahl festgelegt wird. Wenn ja, wird TRUE
die Zeichenfolge ausgewählt und hervorgehoben. WennFALSE
bSelect
, wird die Hervorhebung entfernt, und die Zeichenfolge wird nicht mehr ausgewählt. Die angegebene Zeichenfolge ist standardmäßig ausgewählt und hervorgehoben.
Rückgabewert
LB_ERR
wenn ein Fehler auftritt.
Hinweise
Verwenden Sie diese Memberfunktion nur für Listenfelder mit mehrfacher Auswahl.
Um ein Element aus einem Listenfeld mit einer Auswahl auszuwählen, verwenden Sie CListBox::SetCurSel
.
Beispiel
// 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
Legt die Tabstopppositionen in einem Listenfeld fest.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Parameter
cxEachStop
Tabstopps werden bei allen cxEachStop
Dialogfeldeinheiten festgelegt. Eine Beschreibung einer Dialogeinheit finden Sie unter.See rgTabStops
for a description of a dialog unit.
nTabStops
Gibt die Anzahl der Tabstopps an, die im Listenfeld enthalten sein sollen.
rgTabStops
Zeigt auf das erste Element eines Arrays ganzzahliger Zahlen, die die Tabstopppositionen in Dialogfeldeinheiten enthalten. Eine Dialogeinheit ist ein horizontaler oder vertikaler Abstand. Eine horizontale Dialogeinheit ist gleich 14 der aktuellen Basisbreiteneinheit des Dialogfelds, und eine vertikale Dialogeinheit entspricht einer Achtel der aktuellen Dialogbasishöheneinheit. Die Dialogbasiseinheiten werden basierend auf der Höhe und Breite der aktuellen Systemschriftart berechnet. Die GetDialogBaseUnits
Windows-Funktion gibt die aktuellen Dialogbasiseinheiten in Pixeln zurück. Die Tabstopps müssen in zunehmender Reihenfolge sortiert werden. Zurück-Registerkarten sind nicht zulässig.
Rückgabewert
Nonzero, wenn alle Registerkarten festgelegt wurden; andernfalls 0.
Hinweise
Um Tabstopps auf die Standardgröße von 2 Dialogeinheiten festzulegen, rufen Sie die parameterlose Version dieser Memberfunktion auf. Um Tabstopps auf eine andere Größe als 2 festzulegen, rufen Sie die Version mit dem cxEachStop
Argument auf.
Wenn Sie Tabstopps auf ein Array von Größen festlegen möchten, verwenden Sie die Version mit den rgTabStops
Und-Argumenten nTabStops
. Ein Tabstopp wird für jeden Wert in rgTabStops
, bis zur durch nTabStops
.
Um auf einen Aufruf der SetTabStops
Memberfunktion zu reagieren, muss das Listenfeld mit der LBS_USETABSTOPS
Formatvorlage erstellt worden sein.
Beispiel
// 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
Stellt sicher, dass ein bestimmtes Listenfeldelement sichtbar ist.
int SetTopIndex(int nIndex);
Parameter
nIndex
Gibt den nullbasierten Index des Listenfeldelements an.
Rückgabewert
Null bei erfolgreicher Ausführung oder LB_ERR
wenn ein Fehler auftritt.
Hinweise
Das System scrollt das Listenfeld, bis entweder das durch nIndex
das angegebene Element oben im Listenfeld angezeigt wird oder der maximale Bildlaufbereich erreicht wurde.
Beispiel
// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
Wird vom Framework aufgerufen, wenn das übergeordnete Fenster des Listenfelds eine WM_VKEYTOITEM
Nachricht aus dem Listenfeld empfängt.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Parameter
nKey
Der virtuelle Tastencode der Taste, die der Benutzer gedrückt hat. Eine Liste der standardmäßigen virtuellen Schlüsselcodes finden Sie unter Winuser.h
nIndex
Die aktuelle Position des Listenfeld-Caret.
Rückgabewert
Gibt - 2 für keine weitere Aktion, - 1 für Die Standardaktion oder eine nichtnegative Zahl, um einen Index eines Listenfeldelements anzugeben, für das die Standardaktion für den Tastenanschlag ausgeführt werden soll.
Hinweise
Die WM_VKEYTOITEM
Nachricht wird vom Listenfeld gesendet, wenn sie eine WM_KEYDOWN
Nachricht empfängt, aber nur, wenn das Listenfeld beide der folgenden Elemente erfüllt:
Weist den
LBS_WANTKEYBOARDINPUT
Formatvorlagensatz auf.Verfügt über mindestens ein Element.
Sie sollten diese Funktion niemals selbst aufrufen. Überschreiben Sie diese Funktion, um ihre eigene benutzerdefinierte Behandlung von Tastaturnachrichten bereitzustellen.
Sie müssen einen Wert zurückgeben, um dem Framework mitzuteilen, welche Aktion ihre Außerkraftsetzung ausgeführt hat. Ein Rückgabewert von - 2 gibt an, dass die Anwendung alle Aspekte der Auswahl des Elements behandelt hat und keine weitere Aktion durch das Listenfeld erfordert. Bevor Sie - 2 zurückgeben, können Sie die Markierung festlegen oder das Caret oder beides verschieben. Um die Auswahl festzulegen, verwenden SetCurSel
oder SetSel
. Um das Caret zu verschieben, verwenden Sie SetCaretIndex
.
Ein Rückgabewert von - 1 gibt an, dass das Listenfeld als Reaktion auf den Tastenanschlag die Standardaktion ausführen soll. Die Standardimplementierung gibt - 1 zurück.
Ein Rückgabewert von 0 oder höher gibt den Index eines Elements im Listenfeld an und gibt an, dass das Listenfeld die Standardaktion für die Tastatureingabe für das angegebene Element ausführen soll.
Beispiel
// 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;
}
Siehe auch
MFC-Beispiel STRGTEST
CWnd
Klasse
Hierarchiediagramm
CWnd
Klasse
CButton
Klasse
CComboBox
Klasse
CEdit
Klasse
CScrollBar
Klasse
CStatic
Klasse