Класс 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 |
Извлекает отсчитываемый от нуля индекс текущего элемента привязки в поле списка. |
CListBox::GetCaretIndex |
Определяет индекс элемента с прямоугольником фокуса в списке с несколькими выделениями. |
CListBox::GetCount |
Возвращает количество строк в поле списка. |
CListBox::GetCurSel |
Возвращает отсчитываемый от нуля индекс выбранной строки в списке. |
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 |
Задает отсчитываемый от нуля индекс первой видимой строки в поле списка. |
CListBox::VKeyToItem |
Переопределите, чтобы обеспечить настраиваемую WM_KEYDOWN обработку списков с набором стилей LBS_WANTKEYBOARDINPUT . |
Замечания
В поле списка отображается список элементов, таких как имена файлов, которые пользователь может просматривать и выбирать.
В поле с одним выбором пользователь может выбрать только один элемент. В списке с несколькими выборами можно выбрать диапазон элементов. Когда пользователь выбирает элемент, он выделен, а поле списка отправляет уведомление в родительское окно.
Вы можете создать поле списка из шаблона диалогового окна или непосредственно в коде. Чтобы создать его непосредственно, создайте CListBox
объект, а затем вызовите Create
функцию-член, чтобы создать элемент управления "Список Windows" и присоединить его к объекту CListBox
. Чтобы использовать поле списка в шаблоне диалогового окна, объявите переменную списка в классе диалогового окна, а затем используйте DDX_Control
функцию класса DoDataExchange
диалогового окна для подключения переменной-члена к элементу управления. (это делается автоматически при добавлении переменной элемента управления в класс диалогового окна.)
Построение может быть одношаговным процессом в классе, производным от CListBox
. Напишите конструктор для производного класса и вызов Create
из конструктора.
Если вы хотите обрабатывать сообщения уведомлений Windows, отправляемые полем списка его родительскому элементу (как правило, классу, производным от CDialog
), добавьте запись карты сообщений и функцию-обработчик сообщения в родительский класс для каждого сообщения.
Каждая запись карты сообщений принимает следующую форму:
ON_Notification( id, memberFxn )
где id
указывает идентификатор дочернего окна элемента управления list-box, отправляющий уведомление, и 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, которая должна быть добавлена.
Возвращаемое значение
Отсчитываемый от нуля индекс строки в поле списка. Возвращаемое значение имеет значение LB_ERR
, если возникает ошибка; возвращаемое значение LB_ERRSPACE
имеется, если недостаточно места для хранения новой строки.
Замечания
Если поле списка не было создано со стилем LBS_SORT
, строка добавляется в конец списка. В противном случае строка вставляется в список, а список отсортирован. Если поле списка было создано со LBS_SORT
стилем, но не LBS_HASSTRINGS
стилем, платформа сортирует список по одному или нескольким вызовам 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 или - 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();
Замечания
Вы создаете 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
.
Возвращаемое значение
Указывает относительную позицию двух элементов, описанных в COMPAREITEMSTRUCT
структуре. Это может быть любое из следующих значений:
Значение | Значение |
---|---|
-1 | Элемент 1 сортируется до элемента 2. |
0 | Элемент 1 и элемент 2 сортируются одинаково. |
1 | Элемент 1 сортируется после элемента 2. |
См CWnd::OnCompareItem
. описание COMPAREITEMSTRUCT
структуры.
Замечания
По умолчанию эта функция-член ничего не делает. Если вы создаете поле списка "Рисование владельца" со 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
Указывает идентификатор элемента управления списка.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
Вы создаете CListBox
объект на двух шагах. Сначала вызовите конструктор, а затем вызовите Create
, который инициализирует поле списка Windows и присоединяет его к объекту CListBox
.
При Create
выполнении Windows отправляет WM_NCCREATE
сообщения WM_CREATE
WM_NCCALCSIZE
и WM_GETMINMAXINFO
сообщения в элемент управления list-box.
Эти сообщения обрабатываются по умолчанию функциями OnNcCreate
, OnCreate
OnNcCalcSize
и OnGetMinMaxInfo
членами в базовом CWnd
классе. Чтобы расширить обработку сообщений по умолчанию, наследуйте класс, CListBox
добавьте карту сообщений в новый класс и переопределите предыдущие функции-обработчика сообщений. Переопределите OnCreate
, например, чтобы выполнить необходимую инициализацию для нового класса.
Примените следующие стили окон к элементу управления list-box.
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
, содержащую сведения об удаленном элементе.
Замечания
Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы повторно создать поле списка для рисования владельца по мере необходимости.
См CWnd::OnDeleteItem
. описание DELETEITEMSTRUCT
структуры.
Пример
// 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
Указывает отсчитываемый от нуля индекс строки для удаления.
Возвращаемое значение
Количество строк, оставшихся в списке. Возвращаемое значение имеет LB_ERR
значение, если nIndex
указывает индекс, превышающий число элементов в списке.
Замечания
Все следующие элементы nIndex
теперь перемещаются вниз по одной позиции. Например, если поле списка содержит два элемента, удаление первого элемента приведет к тому, что оставшийся элемент будет находиться в первой позиции. 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
Может быть любое сочетание значений enum
, описанных в CFile::GetStatus
, или любое сочетание следующих значений:
Значение | Значение |
---|---|
0x0000 | Файл можно считывать или записывать в. |
0x0001 | Файл можно считывать, но не записывать в. |
0x0002 | Файл скрыт и не отображается в списке каталогов. |
0x0004 | Файл является системным файлом. |
0x0010 | Имя, указанное в lpszWildCard каталоге. |
0x0020 | Файл был архивирован. |
0x4000 | Включите все диски, соответствующие имени, заданному lpszWildCard . |
0x8000 | Эксклюзивный флаг. Если установлен монопольный флаг, перечислены только файлы указанного типа. В противном случае файлы указанного типа перечислены в дополнение к обычным файлам. |
lpszWildCard
Указывает на строку спецификации файла. Строка может содержать подстановочные знаки (например, *.*).
Возвращаемое значение
Отсчитываемый от нуля индекс последнего имени файла, добавленного в список. Возвращаемое значение имеет значение 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
указатель на структуру, содержащую сведения о типе документа, необходимом.
Замечания
itemState
DRAWITEMSTRUCT
Элементы itemAction
структуры определяют выполняемую операцию рисования.
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член, чтобы реализовать рисование для объекта owner-draw CListBox
. Приложение должно восстановить все объекты интерфейса графического устройства (GDI), выбранные для контекста отображения, предоставленного lpDrawItemStruct
перед завершением этой функции-члена.
См CWnd::OnDrawItem
. описание DRAWITEMSTRUCT
структуры.
Пример
// 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
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter
. Если nStartAfter
значение равно -1, вся поле списка выполняется поиск с самого начала.
lpszItem
Указывает на строку, завершающую значение NULL, содержащую префикс для поиска. Поиск является независимым от регистра, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Возвращаемое значение
Отсчитываемый от нуля индекс соответствующего элемента или 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
Указывает отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nIndexStart
. Если nIndexStart
значение равно -1, вся поле списка выполняется поиск с самого начала.
lpszFind
Указывает на строку, завершаемую значением NULL, для поиска. Эта строка может содержать полное имя файла, включая расширение. Поиск не учитывает регистр, поэтому строка может содержать любое сочетание прописных и строчных букв.
Возвращаемое значение
Индекс соответствующего элемента или LB_ERR
если поиск был неудачным.
Замечания
Если поле списка было создано с стилем рисования владельца, FindStringExact
но без LBS_HASSTRINGS
стиля, функция-член пытается сопоставить значение 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
Извлекает отсчитываемый от нуля индекс текущего элемента привязки в поле списка.
int GetAnchorIndex() const;
Возвращаемое значение
Индекс текущего элемента привязки, если он выполнен успешно; в противном случае LB_ERR.
Замечания
В списке с несколькими выборами элемент привязки является первым или последним элементом в блоке смежных элементов.
Пример
Пример см. в примере CListBox::SetAnchorIndex
.
CListBox::GetCaretIndex
Определяет индекс элемента с прямоугольником фокуса в списке с несколькими выделениями.
int GetCaretIndex() const;
Возвращаемое значение
Отсчитываемый от нуля индекс элемента с прямоугольником фокуса в списке. Если поле списка является полем с одним выбором, возвращаемое значение является индексом выбранного элемента, если таковой имеется.
Замечания
Элемент может быть выбран или не выбран.
Пример
Пример см. в примере CListBox::SetCaretIndex
.
CListBox::GetCount
Извлекает количество элементов в поле списка.
int GetCount() const;
Возвращаемое значение
Количество элементов в списке или LB_ERR
ошибка.
Замечания
Возвращаемое число больше, чем значение индекса последнего элемента (индекс является отсчитываемым от нуля).
Пример
// 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
Извлекает отсчитываемый от нуля индекс выбранного элемента в списке с одним выделением.
int GetCurSel() const;
Возвращаемое значение
Отсчитываемый от нуля индекс выбранного элемента, если он является полем с одним выбором. 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
Извлекает предоставленное приложением двойное слово, связанное с указанным элементом списка.
DWORD_PTR GetItemData(int nIndex) const;
Параметры
nIndex
Задает отсчитываемый от нуля индекс элемента в поле списка.
Возвращаемое значение
Значение, связанное с элементом или 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
Задает отсчитываемый от нуля индекс элемента в поле списка.
Возвращаемое значение
Извлекает указатель или -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
Задает отсчитываемый от нуля индекс элемента в поле списка. Этот параметр используется только в том случае, если поле списка имеет 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
Задает отсчитываемый от нуля индекс элемента.
lpRect
Указывает длинный указатель на RECT
структуру , которая получает координаты клиента list-box элемента.
Возвращаемое значение
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
объекта.
Замечания
Эта функция-член эмулирует функциональные возможности LB_GETLISTBOXINFO
сообщения, как описано в пакете SDK для Windows.
CListBox::GetLocale
Извлекает языковой стандарт, используемый полем списка.
LCID GetLocale() const;
Возвращаемое значение
Значение идентификатора языкового стандарта (LCID) для строк в поле списка.
Замечания
Языковой стандарт используется, например, для определения порядка сортировки строк в отсортированного списка.
Пример
Пример см. в примере CListBox::SetLocale
.
CListBox::GetSel
Извлекает состояние выделения элемента.
int GetSel(int nIndex) const;
Параметры
nIndex
Задает отсчитываемый от нуля индекс элемента.
Возвращаемое значение
Положительное число, если выбран указанный элемент; в противном случае значение равно 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
Указывает отсчитываемый от нуля индекс строки.
lpszBuffer
Указывает на буфер, получающий строку. Буфер должен иметь достаточно места для строки и завершающего символа NULL. Размер строки можно определить заранее, вызвав GetTextLen
функцию-член.
rString
Ссылка на объект CString
.
Возвращаемое значение
Длина строки (в байтах), за исключением завершающего символа NULL. Если nIndex
не указан допустимый индекс, возвращается LB_ERR
возвращаемое значение.
Замечания
Вторая форма этой функции-члена заполняет 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
Задает отсчитываемый от нуля индекс строки.
Возвращаемое значение
Длина строки в символах, за исключением завершающего символа NULL. Если nIndex
не указан допустимый индекс, возвращается LB_ERR
возвращаемое значение.
Пример
Пример см. в примере CListBox::GetText
.
CListBox::GetTopIndex
Извлекает отсчитываемый от нуля индекс первого видимого элемента в поле списка.
int GetTopIndex() const;
Возвращаемое значение
Отсчитываемый от нуля индекс первого видимого элемента в поле списка в противном случае. 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
Указывает отсчитываемый от нуля индекс позиции для вставки строки. Если этот параметр равен -1, строка добавляется в конец списка.
lpszItem
Указывает на оканчивающуюся символом NULL строку, которую нужно вставить.
Возвращаемое значение
Отсчитываемый от нуля индекс позиции, в которую была вставлена строка. Возвращаемое значение имеет значение 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
переменную, которая будет задана TRUE
, если pt
находится вне клиентской области списка, FALSE
если pt
находится внутри клиентской области списка.
Возвращаемое значение
Индекс ближайшего элемента к точке, указанной в pt
.
Замечания
Эту функцию можно использовать для определения элемента списка, над которым перемещается курсор мыши.
Пример
Пример см. в примере CListBox::SetAnchorIndex
.
CListBox::MeasureItem
Вызывается платформой при создании поля списка с стилем рисования владельца.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Параметры
lpMeasureItemStruct
Длинный указатель на структуру MEASUREITEMSTRUCT
.
Замечания
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член и заполните структуру MEASUREITEMSTRUCT
, чтобы сообщить Windows о измерениях списка. Если поле списка создается с LBS_OWNERDRAWVARIABLE
помощью стиля, платформа вызывает эту функцию-член для каждого элемента в поле списка. В противном случае этот элемент вызывается только один раз.
Дополнительные сведения об использовании LBS_OWNERDRAWFIXED
стиля в поле списка "Рисование владельца", созданном с SubclassDlgItem
помощью функции-члена CWnd
, см. в обсуждении в Техническом примечание 14.
См CWnd::OnMeasureItem
. описание MEASUREITEMSTRUCT
структуры.
Пример
// 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
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter
. Если nStartAfter
значение равно -1, вся поле списка выполняется поиск с самого начала.
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
Указывает, как задать выделение. Если это TRUE
так, строка выбрана и выделена; если bSelect
FALSE
выделение удаляется, а строка больше не выбрана.
nFirstItem
Задает отсчитываемый от нуля индекс первого элемента.
nLastItem
Задает отсчитываемый от нуля индекс последнего элемента.
Возвращаемое значение
LB_ERR
Если возникает ошибка.
Замечания
Используйте эту функцию-член только с полями списка с несколькими выборами. Если нужно выбрать только один элемент в списке с несколькими выборами , то есть, если nFirstItem
равно nLastItem
, вызовите SetSel
функцию-член.
Пример
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Задает привязку в списке с несколькими выборами, чтобы начать расширенный выбор.
void SetAnchorIndex(int nIndex);
Параметры
nIndex
Указывает отсчитываемый от нуля индекс элемента списка, который будет привязкой.
Замечания
В списке с несколькими выборами элемент привязки является первым или последним элементом в блоке смежных элементов.
Пример
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
Задает отсчитываемый от нуля индекс элемента для получения прямоугольника фокуса в поле списка.
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
Указывает отсчитываемый от нуля индекс выбранной строки. Если nSelect
значение равно -1, поле списка не имеет выбора.
Возвращаемое значение
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
Задает отсчитываемый от нуля индекс элемента.
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
Задает отсчитываемый от нуля индекс элемента.
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
Задает отсчитываемый от нуля индекс элемента в поле списка. Этот параметр используется только в том случае, если поле списка имеет 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
Содержит отсчитываемый от нуля индекс строки. Если значение -1, выделение добавляется или удаляется из всех строк в зависимости от значения bSelect
.
bSelect
Указывает, как задать выделение. Если это TRUE
так, строка выбрана и выделена; если bSelect
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
Указывает на первый член массив целых чисел, содержащий позиции табуляции в диалоговых блоках. Единица диалога — это горизонтальное или вертикальное расстояние. Одна горизонтальная единица диалога равна одной четверти текущей единицы базовой ширины диалогового окна, а одна вертикальная единица диалога равна одной восьмой единице текущей базовой высоты диалогового окна. Базовые единицы диалога вычисляются на основе высоты и ширины текущего системного шрифта. Функция GetDialogBaseUnits
Windows возвращает текущие базовые единицы диалогового окна в пикселях. Остановки табуляции должны быть отсортированы по возрастанию порядка; Вкладки "назад" не допускаются.
Возвращаемое значение
Ненулевое значение, если заданы все вкладки; в противном случае — 0.
Замечания
Чтобы задать размер вкладки по умолчанию в 2 блоках диалоговых окон, вызовите версию этой функции-члена без параметров. Чтобы задать размер вкладки, отличный от 2, вызовите версию с аргументом cxEachStop
.
Чтобы задать для табуляции массив размеров, используйте версию с rgTabStops
аргументами и nTabStops
аргументами. Для каждого значения 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
Задает отсчитываемый от нуля индекс элемента списка.
Возвращаемое значение
Ноль при успешном выполнении или LB_ERR
при возникновении ошибки.
Замечания
Система прокручивает поле списка до тех пор, пока элемент, указанный 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
.Имеет хотя бы один элемент.
Вы никогда не должны вызывать эту функцию самостоятельно. Переопределите эту функцию, чтобы обеспечить собственную настраиваемую обработку сообщений клавиатуры.
Необходимо вернуть значение, чтобы сообщить платформе, какое действие выполняется переопределение. Возвращаемое значение - 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;
}
См. также
Пример CTRLTEST MFC
CWnd
Класс
Диаграмма иерархии
CWnd
Класс
CButton
Класс
CComboBox
Класс
CEdit
Класс
CScrollBar
Класс
CStatic
Класс