Класс CComboBox
Предоставляет функции поля со списком Windows.
Синтаксис
class CComboBox : public CWnd
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CComboBox::CComboBox |
Формирует объект CComboBox . |
Открытые методы
Имя | Описание |
---|---|
CComboBox::AddString |
Добавляет строку в конец списка в поле со списком поля со списком или в отсортированную позицию для списков со стилем CBS_SORT . |
CComboBox::Clear |
Удаляет (очищает) текущий выбор, если он есть, в элементе управления редактирования. |
CComboBox::CompareItem |
Вызывается платформой для определения относительной позиции нового элемента списка в отсортированного поля со списком нарисованного владельца. |
CComboBox::Copy |
Копирует текущий выделенный фрагмент в буфер обмена в CF_TEXT формате. |
CComboBox::Create |
Создает поле со списком и присоединяет его к объекту CComboBox . |
CComboBox::Cut |
Удаляет (вырезает) текущий выделенный фрагмент в элементе управления редактирования и копирует удаленный текст в буфер обмена в CF_TEXT формате. |
CComboBox::DeleteItem |
Вызывается платформой, когда элемент списка удаляется из поля со списком, нарисованным владельцем. |
CComboBox::DeleteString |
Удаляет строку из списка поля со списком. |
CComboBox::Dir |
Добавляет список имен файлов в поле со списком. |
CComboBox::DrawItem |
Вызывается платформой, когда визуальный аспект нарисованного владельцем поля со списком изменяется. |
CComboBox::FindString |
Находит первую строку, содержащую указанный префикс в поле списка поля со списком. |
CComboBox::FindStringExact |
Находит первую строку списка (в поле со списком), которая соответствует указанной строке. |
CComboBox::GetComboBoxInfo |
Извлекает сведения об объекте CComboBox . |
CComboBox::GetCount |
Извлекает количество элементов в поле со списком. |
CComboBox::GetCueBanner |
Возвращает текст подсказки, отображаемый для элемента управления со списком. |
CComboBox::GetCurSel |
Извлекает индекс выбранного в данный момент элемента, если таковой имеется, в поле со списком. |
CComboBox::GetDroppedControlRect |
Извлекает координаты экрана видимого (раскрывающегося) списка раскрывающегося списка. |
CComboBox::GetDroppedState |
Определяет, отображается ли поле списка раскрывающегося списка (удалено). |
CComboBox::GetDroppedWidth |
Извлекает минимальную допустимую ширину раскрывающегося списка части поля со списком. |
CComboBox::GetEditSel |
Возвращает начальные и конечные позиции символов текущего выделения в элементе управления редактированием поля со списком. |
CComboBox::GetExtendedUI |
Определяет, имеет ли поле со списком пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс. |
CComboBox::GetHorizontalExtent |
Возвращает ширину в пикселях, в которую можно прокручивать часть поля со списком по горизонтали. |
CComboBox::GetItemData |
Извлекает 32-разрядное значение, предоставленное приложением, связанное с указанным элементом со списком. |
CComboBox::GetItemDataPtr |
Извлекает 32-разрядный указатель приложения, связанный с указанным элементом со списком. |
CComboBox::GetItemHeight |
Извлекает высоту элементов списка в поле со списком. |
CComboBox::GetLBText |
Возвращает строку из списка поля со списком. |
CComboBox::GetLBTextLen |
Возвращает длину строки в поле со списком. |
CComboBox::GetLocale |
Извлекает идентификатор языкового стандарта для поля со списком. |
CComboBox::GetMinVisible |
Возвращает минимальное количество видимых элементов в раскрывающемся списке текущего поля со списком. |
CComboBox::GetTopIndex |
Возвращает индекс первого видимого элемента в списке части поля со списком. |
CComboBox::InitStorage |
Предварительно выделяет блоки памяти для элементов и строк в списке в поле со списком. |
CComboBox::InsertString |
Вставляет строку в список поля со списком. |
CComboBox::LimitText |
Ограничивает длину текста, который пользователь может ввести в элемент управления редактированием поля со списком. |
CComboBox::MeasureItem |
Вызывается платформой для определения измерений поля со списком при создании поля со списком владельца. |
CComboBox::Paste |
Вставляет данные из буфера обмена в элемент управления редактирования в текущей позиции курсора. Данные вставляются только в том случае, если буфер обмена содержит данные в CF_TEXT формате. |
CComboBox::ResetContent |
Удаляет все элементы из списка и редактирует элемент управления со списком. |
CComboBox::SelectString |
Выполняет поиск строки в поле со списком поля со списком и, если строка найдена, выбирает строку в поле списка и копирует строку в элемент управления редактирования. |
CComboBox::SetCueBanner |
Задает текст подсказки, отображаемый для элемента управления со списком. |
CComboBox::SetCurSel |
Выбирает строку в списке поля со списком. |
CComboBox::SetDroppedWidth |
Задает минимальную допустимую ширину раскрывающегося списка в поле со списком. |
CComboBox::SetEditSel |
Выбирает символы в элементе управления редактированием поля со списком. |
CComboBox::SetExtendedUI |
Выбирает пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс для поля со списком, имеющего CBS_DROPDOWN или CBS_DROPDOWNLIST стиль. |
CComboBox::SetHorizontalExtent |
Задает ширину в пикселях, в которую можно прокручивать часть поля со списком по горизонтали. |
CComboBox::SetItemData |
Задает 32-разрядное значение, связанное с указанным элементом в поле со списком. |
CComboBox::SetItemDataPtr |
Задает 32-разрядный указатель, связанный с указанным элементом в поле со списком. |
CComboBox::SetItemHeight |
Задает высоту элементов списка в поле со списком или высоту элемента управления редактированием (или статического текста) поля со списком. |
CComboBox::SetLocale |
Задает идентификатор языкового стандарта для поля со списком. |
CComboBox::SetMinVisibleItems |
Задает минимальное количество видимых элементов в раскрывающемся списке текущего поля со списком. |
CComboBox::SetTopIndex |
Указывает списку часть поля со списком, чтобы отобразить элемент с указанным индексом в верхней части. |
CComboBox::ShowDropDown |
Отображает или скрывает поле со списком поля со списком CBS_DROPDOWN , которое имеет или CBS_DROPDOWNLIST стиль. |
Замечания
Поле со списком состоит из поля списка в сочетании со статическим элементом управления или элементом управления редактирования. Часть списка элемента управления может отображаться в любое время или может отображаться только в том случае, если пользователь выбирает стрелку раскрывающегося списка рядом с элементом управления.
Выбранный в данный момент элемент (при наличии) в списке отображается в статическом или редактируемом элементе управления. Кроме того, если поле со списком имеет стиль раскрывающегося списка, пользователь может ввести начальный символ одного из элементов в списке, а поле списка, если отображается, выделите следующий элемент с этим начальным символом.
В следующей таблице сравниваются три стиля со списком.
Стиль | Если отображается поле списка | Статический или редактируемый элемент управления |
---|---|---|
Простая | Всегда | Изменить |
Раскрывающийся список | При удалении вниз | Изменить |
Раскрывающийся список | При удалении вниз | Статические |
Объект можно создать CComboBox
из шаблона диалогового окна или непосредственно в коде. В обоих случаях сначала вызовите конструктор CComboBox
для создания CComboBox
объекта, а затем вызовите Create
функцию-член, чтобы создать элемент управления и присоединить его к объекту CComboBox
.
Если вы хотите обрабатывать сообщения уведомлений Windows, отправленные полем со списком в родительский (как правило, класс, производный от CDialog
), добавьте запись карты сообщений и функцию-обработчик сообщений в родительский класс для каждого сообщения.
Каждая запись карты сообщений принимает следующую форму:
ON_Notification( id, memberFxn )
где id
указывает идентификатор дочернего окна элемента управления со списком, отправляющий уведомление, и memberFxn
является именем родительской функции-члена, записанной для обработки уведомления.
Прототип функции родительского объекта выглядит следующим образом:
afx_msg void memberFxn( );
Порядок отправки определенных уведомлений не может быть предсказан. В частности, CBN_SELCHANGE
уведомление может возникать либо до, либо после CBN_CLOSEUP
уведомления.
Возможные записи карты сообщений приведены ниже.
ON_CBN_CLOSEUP
(Windows 3.1 и более поздних версий.) Список поля со списком закрыт. Это сообщение уведомления не отправляется для поля со списком с стилемCBS_SIMPLE
.ON_CBN_DBLCLK
Пользователь дважды щелкает строку в списке поля со списком. Это сообщение уведомления отправляется только для поля со списком со стилемCBS_SIMPLE
. Для поля со списком илиCBS_DROPDOWN
CBS_DROPDOWNLIST
стиля двойной щелчок не может произойти, так как один щелчок скрывает поле списка.ON_CBN_DROPDOWN
Список поля со списком находится в раскрывающемся списке (быть видимым). Это сообщение уведомления может возникать только для поля со списком или стилемCBS_DROPDOWN
CBS_DROPDOWNLIST
.ON_CBN_EDITCHANGE
Пользователь сделал действие, которое могло изменить текст в части элемента управления редактированием поля со списком.CBN_EDITUPDATE
В отличие от сообщения, это сообщение отправляется после обновления экрана Windows. Он не отправляется, если поле со спискомCBS_DROPDOWNLIST
имеет стиль.ON_CBN_EDITUPDATE
Часть элемента управления редактированием поля со списком будет отображать измененный текст. Это уведомление отправляется после того, как элемент управления отформатировал текст, но перед отображением текста. Он не отправляется, если поле со спискомCBS_DROPDOWNLIST
имеет стиль.ON_CBN_ERRSPACE
Поле со списком не может выделить достаточно памяти для выполнения определенного запроса.ON_CBN_SELENDCANCEL
(Windows 3.1 и более поздних версий.) Указывает, что выбор пользователя должен быть отменен. Пользователь щелкает элемент, а затем щелкает другое окно или элемент управления, чтобы скрыть поле со списком. Это уведомление отправляется перед уведомлениемCBN_CLOSEUP
, чтобы указать, что выбор пользователя должен игнорироваться. СообщениеCBN_SELENDCANCEL
илиCBN_SELENDOK
уведомление отправляется, даже еслиCBN_CLOSEUP
сообщение уведомления не отправляется (как в случае поля со списком с стилемCBS_SIMPLE
).ON_CBN_SELENDOK
Пользователь выбирает элемент, а затем нажимает клавишу ВВОД или щелкает клавишу СТРЕЛКА ВНИЗ, чтобы скрыть поле со списком поля со списком. Это уведомление отправляется перед сообщением,CBN_CLOSEUP
чтобы указать, что выбор пользователя должен считаться допустимым. СообщениеCBN_SELENDCANCEL
илиCBN_SELENDOK
уведомление отправляется, даже еслиCBN_CLOSEUP
сообщение уведомления не отправляется (как в случае поля со списком с стилемCBS_SIMPLE
).ON_CBN_KILLFOCUS
Поле со списком теряет фокус ввода.ON_CBN_SELCHANGE
Выбор в списке поля со списком будет изменен в результате щелчка пользователя в поле списка или изменения выделения с помощью клавиш со стрелками. При обработке этого сообщения текст в элементе управления редактированием поля со списком можно получить только черезGetLBText
другую аналогичную функцию.GetWindowText
нельзя использовать.ON_CBN_SETFOCUS
Поле со списком получает фокус ввода.
При создании CComboBox
объекта в диалоговом окне (с помощью ресурса диалогового окна) CComboBox
объект автоматически уничтожается, когда пользователь закрывает диалоговое окно.
Если вы внедряете CComboBox
объект в другой объект окна, его не нужно уничтожить. При создании CComboBox
объекта в стеке он автоматически уничтожается. Если вы создаете CComboBox
объект в куче с помощью new
функции, необходимо вызвать delete
объект, чтобы уничтожить его при уничтожении поля со списком Windows.
Обратите внимание , что если вы хотите обрабатывать WM_KEYDOWN
и WM_CHAR
сообщения, необходимо подклассить элементы управления редактирования и списка поля со списком, наследовать классы и CEdit
CListBox
добавлять обработчики для этих сообщений в производные классы. Дополнительные сведения см. в разделе CWnd::SubclassWindow
.
Иерархия наследования
CComboBox
Требования
Заголовок: afxwin.h
CComboBox::AddString
Добавляет строку в поле списка поля со списком.
int AddString(LPCTSTR lpszString);
Параметры
lpszString
Указывает на строку, завершающуюся значением NULL, которая должна быть добавлена.
Возвращаемое значение
Если возвращаемое значение больше или равно 0, это отсчитываемый от нуля индекс строки в поле списка. Возвращаемое значение имеет значение CB_ERR
, если возникает ошибка; возвращаемое значение CB_ERRSPACE
имеется, если недостаточно места для хранения новой строки.
Замечания
Если поле списка не было создано со стилем CBS_SORT
, строка добавляется в конец списка. В противном случае строка вставляется в список, а список отсортирован.
Примечание.
Эта функция не поддерживается элементом управления Windows ComboBoxEx
. Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx
"Элементы управления " в пакете SDK для Windows.
Чтобы вставить строку в определенное расположение в списке, используйте функцию-член InsertString
.
Пример
// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
str.Format(_T("item string %d"), i);
m_pComboBox->AddString(str);
}
CComboBox::CComboBox
Формирует объект CComboBox
.
CComboBox();
Пример
// Declare a local CComboBox object.
CComboBox myComboBox;
// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;
CComboBox::Clear
Удаляет (очищает) текущий выделенный фрагмент( если таковой есть) в элементе управления редактированием поля со списком.
void Clear();
Замечания
Чтобы удалить текущий выбор и поместить удаленное содержимое в буфер обмена, используйте функцию-член Cut
.
Пример
// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();
CComboBox::CompareItem
Вызывается платформой, чтобы определить относительную позицию нового элемента в списке части отсортированного поля со списком владельца.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Параметры
lpCompareItemStruct
Длинный указатель на структуру COMPAREITEMSTRUCT
.
Возвращаемое значение
Указывает относительную позицию двух элементов, описанных в COMPAREITEMSTRUCT
структуре. В качестве такой точки может выступать любой из следующих вариантов:
Значение | Значение |
---|---|
-1 | Элемент 1 сортируется до элемента 2. |
0 | Элемент 1 и элемент 2 сортируются одинаково. |
1 | Элемент 1 сортируется после элемента 2. |
Дополнительные сведения см CWnd::OnCompareItem
. в описании COMPAREITEMSTRUCT
.
Замечания
По умолчанию эта функция-член ничего не делает. Если вы создаете поле со списком владельца с LBS_SORT
стилем, необходимо переопределить эту функцию-член, чтобы помочь платформе в сортировке новых элементов, добавленных в поле списка.
Пример
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
int iComp = 0;
ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
if (NULL != lpszText1 && NULL != lpszText2)
{
iComp = _tcscmp(lpszText2, lpszText1);
}
return iComp;
}
CComboBox::Copy
Копирует текущий выделенный фрагмент в элементе управления редактированием поля со списком в буфер обмена в CF_TEXT
формате.
void Copy();
Пример
// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();
CComboBox::Create
Создает поле со списком и присоединяет его к объекту CComboBox
.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Параметры
dwStyle
Задает стиль поля со списком. Примените к коробке любое сочетание стилей со списком .
rect
Указывает на позицию и размер поля со списком. Может быть структурой RECT
CRect
или объектом.
pParentWnd
Указывает родительское окно поля со списком (обычно — CDialog
). Это не должно быть NULL
.
nID
Указывает идентификатор элемента управления поля со списком.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
Вы создаете CComboBox
объект на двух шагах. Сначала вызовите конструктор и вызов Create
, который создает поле со списком Windows и присоединяет его к объекту CComboBox
.
При Create
выполнении Windows отправляет WM_NCCREATE
сообщения и WM_CREATE
WM_NCCALCSIZE
WM_GETMINMAXINFO
сообщения в поле со списком.
Эти сообщения обрабатываются по умолчанию функциями OnNcCreate
, OnCreate
OnNcCalcSize
и OnGetMinMaxInfo
членами в базовом CWnd
классе. Чтобы расширить обработку сообщений по умолчанию, наследуйте класс, CComboBox
добавьте карту сообщений в новый класс и переопределите предыдущие функции-обработчика сообщений. Переопределите OnCreate
, например, чтобы выполнить необходимую инициализацию для нового класса.
Примените следующие стили окон к элементу управления со списком. :
WS_CHILD
ВсегдаWS_VISIBLE
ОбычноWS_DISABLED
РедкоWS_VSCROLL
Добавление вертикальной прокрутки для поля списка в поле со спискомWS_HSCROLL
Добавление горизонтальной прокрутки для поля списка в поле со спискомWS_GROUP
Группирование элементов управленияWS_TABSTOP
Включение поля со списком в порядок табуляции
Пример
m_pComboBox->Create(
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
CRect(10, 10, 200, 100), pParentWnd, 1);
CComboBox::Cut
Удаляет (вырезает) текущий выделенный фрагмент, если таковой есть, в элементе управления редактирования со списком и копирует удаленный текст в буфер обмена в CF_TEXT
формате.
void Cut();
Замечания
Чтобы удалить текущее выделение без размещения удаленного текста в буфер обмена, вызовите Clear
функцию-член.
Пример
// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();
CComboBox::DeleteItem
Вызывается платформой, когда пользователь удаляет элемент из объекта с рисованием CComboBox
владельца или уничтожает поле со списком.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Параметры
lpDeleteItemStruct
Длинный указатель на структуру Windows DELETEITEMSTRUCT
, содержащую сведения об удаленном элементе. См CWnd::OnDeleteItem
. описание этой структуры.
Замечания
Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы переопределить поле со списком по мере необходимости.
Пример
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
AFXDUMP(lpszText);
}
CComboBox::DeleteString
Удаляет элемент в позиции nIndex
из поля со списком.
int DeleteString(UINT nIndex);
Параметры
nIndex
Указывает индекс для строки, которую необходимо удалить.
Возвращаемое значение
Если возвращаемое значение больше или равно 0, это число строк, оставшихся в списке. Возвращаемое значение имеет CB_ERR
значение, если nIndex
указывает индекс, превышающий число элементов в списке.
Замечания
Все следующие элементы nIndex
теперь перемещаются вниз по одной позиции. Например, если поле со списком содержит два элемента, удаление первого элемента приведет к тому, что оставшийся элемент будет находиться в первой позиции. nIndex
=0 для элемента в первой позиции.
Пример
// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
m_pComboBox->DeleteString(i);
}
CComboBox::Dir
Добавляет список имен файлов или дисков в поле со списком поля со списком.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Параметры
attr
Может быть любое сочетание значений enum
, описанных в CFile::GetStatus
или любом сочетании следующих значений:
DDL_READWRITE
Файл можно считывать или записывать в.DDL_READONLY
Файл можно считывать, но не записывать в.DDL_HIDDEN
Файл скрыт и не отображается в списке каталогов.DDL_SYSTEM
Файл является системным файлом.DDL_DIRECTORY
Имя, указанное вlpszWildCard
каталоге.DDL_ARCHIVE
Файл был архивирован.DDL_DRIVES
Включите все диски, соответствующие имени, заданномуlpszWildCard
.DDL_EXCLUSIVE
Эксклюзивный флаг. Если установлен монопольный флаг, перечислены только файлы указанного типа. В противном случае файлы указанного типа перечислены в дополнение к обычным файлам.
lpszWildCard
Указывает на строку спецификации файла. Строка может содержать подстановочные знаки (например, *.*
).
Возвращаемое значение
Если возвращаемое значение больше или равно 0, он является отсчитываемым от нуля индексом последнего имени файла, добавленного в список. Возвращаемое значение имеет значение CB_ERR
, если возникает ошибка; возвращаемое значение CB_ERRSPACE
имеется, если недостаточно места для хранения новых строк.
Замечания
Эта функция не поддерживается элементом управления Windows ComboBoxEx
. Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx
"Элементы управления " в пакете SDK для Windows.
Пример
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);
CComboBox::DrawItem
Вызывается платформой при изменении визуального аспекта поля со списком владельца.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Параметры
lpDrawItemStruct
Указатель на DRAWITEMSTRUCT
структуру, содержащую сведения о типе документа.
Замечания
Элемент itemAction
DRAWITEMSTRUCT
структуры определяет действие рисования, которое необходимо выполнить. См CWnd::OnDrawItem
. описание этой структуры.
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член, чтобы реализовать рисование для объекта owner-draw CComboBox
. Прежде чем эта функция-член завершится, приложение должно восстановить все объекты интерфейса графического устройства (GDI), выбранные для контекста отображения, указанного в lpDrawItemStruct
.
Пример
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Erase
// the rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CComboBox::FindString
Находит, но не выбирает первую строку, содержащую указанный префикс в поле со списком поля со списком.
int FindString(
int nStartAfter,
LPCTSTR lpszString) const;
Параметры
nStartAfter
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter
. Если значение -1, все поле списка выполняется в начале поиска.
lpszString
Указывает на строку, завершающую значение NULL, содержащую префикс для поиска. Поиск является независимым от регистра, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Возвращаемое значение
Если возвращаемое значение больше или равно 0, это отсчитываемый от нуля индекс соответствующего элемента. Это если CB_ERR
поиск был неудачным.
Замечания
Эта функция не поддерживается элементом управления Windows ComboBoxEx
. Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx
"Элементы управления " в пакете SDK для Windows.
Пример
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
m_pComboBox->DeleteString(nItem);
}
CComboBox::FindStringExact
Вызовите функцию-член, FindStringExact
чтобы найти первую строку списка (в поле со списком), которая соответствует строке, указанной в lpszFind
.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Параметры
nIndexStart
Указывает отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nIndexStart
. Если nIndexStart
значение равно -1, вся поле списка выполняется поиск с самого начала.
lpszFind
Указывает на строку, завершаемую значением NULL, для поиска. Эта строка может содержать полное имя файла, включая расширение. Поиск не учитывает регистр, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Возвращаемое значение
Отсчитываемый от нуля индекс соответствующего элемента или CB_ERR
если поиск был неудачным.
Замечания
Если поле со списком было создано с стилем рисования владельца, но без CBS_HASSTRINGS
стиля, FindStringExact
пытается сопоставить значение doubleword со значением lpszFind.
Пример
// The string to match.
LPCTSTR lpszmyExactString = _T("item 5");
// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
m_pComboBox->DeleteString(nDex);
}
CComboBox::GetComboBoxInfo
Извлекает сведения для CComboBox
объекта.
BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;
Параметры
*pcbi*<br/> A pointer to the [
COMBOBOXINFO'](/windows/win32/api/winuser/ns-winuser-comboboxinfo) структура.
Возвращаемое значение
Возвращает успешность TRUE
при FALSE
сбое.
Замечания
Эта функция-член эмулирует функциональные возможности CB_GETCOMBOBOXINFO
сообщения, как описано в пакете SDK для Windows.
CComboBox::GetCount
Вызовите эту функцию-член, чтобы получить количество элементов в списке части поля со списком.
int GetCount() const;
Возвращаемое значение
Количество элементов. Возвращаемое число больше, чем значение индекса последнего элемента (индекс является отсчитываемым от нуля). Это происходит CB_ERR
при возникновении ошибки.
Пример
// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
strItem.Format(_T("item %d"), i);
m_pComboBox->AddString(strItem);
}
// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);
CComboBox::GetCueBanner
Возвращает текст подсказки, отображаемый для элемента управления со списком.
CString GetCueBanner() const;
BOOL GetCueBanner(
LPTSTR lpszText,
int cchText) const;
Параметры
lpszText
[out] Указатель на буфер, который получает текст баннера подсказки.
cchText
[in] Размер буфера, на который lpszText
указывает параметр.
Возвращаемое значение
В первой перегрузке объект, CString
содержащий текст баннера подсказки, если он существует; в противном случае CString
объект с нулевой длиной.
–или–
Вторая перегрузка, TRUE
если этот метод выполнен успешно; в противном случае FALSE
.
Замечания
Текст cue — это запрос, отображаемый в области ввода элемента управления со списком. Текст подсказки отображается до тех пор, пока пользователь не предоставит входные данные.
Этот метод отправляет CB_GETCUEBANNER
сообщение, описанное в пакете SDK для Windows.
CComboBox::GetCurSel
Вызовите эту функцию-член, чтобы определить, какой элемент в поле со списком выбран.
int GetCurSel() const;
Возвращаемое значение
Отсчитываемый от нуля индекс выбранного элемента в списке поля со списком или CB_ERR
если элемент не выбран.
Замечания
GetCurSel
возвращает индекс в список.
Пример
// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_pComboBox->SetCurSel(nIndex);
else
m_pComboBox->SetCurSel(0);
}
CComboBox::GetDroppedControlRect
Вызовите функцию-член, GetDroppedControlRect
чтобы получить координаты экрана видимого (раскрывающегося списка) раскрывающегося списка.
void GetDroppedControlRect(LPRECT lprect) const;
Параметры
lprect
Указывает на структуру RECT, которая требуется получить координаты.
Пример
// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.
// The point to move the combo box to.
CPoint myPoint(30, 10);
CRect r;
m_pComboBox->GetDroppedControlRect(&r);
m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);
CComboBox::GetDroppedState
Вызовите функцию-член, GetDroppedState
чтобы определить, отображается ли поле списка раскрывающегося списка (удалено).
BOOL GetDroppedState() const;
Возвращаемое значение
Ненулевое значение, если поле списка отображается; в противном случае — 0.
Пример
// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
m_pComboBox->ShowDropDown(TRUE);
CComboBox::GetDroppedWidth
Вызовите эту функцию, чтобы получить минимальную допустимую ширину (в пикселях) списка поля со списком.
int GetDroppedWidth() const;
Возвращаемое значение
В случае успешного выполнения минимальная допустимая ширина в пикселях; CB_ERR
в противном случае .
Замечания
Эта функция применяется только к полям со списком или стилем CBS_DROPDOWN
CBS_DROPDOWNLIST
.
По умолчанию минимальная допустимая ширина раскрывающегося списка равна 0. Минимальная допустимая ширина может быть задана путем вызова SetDroppedWidth
. Когда отображается часть списка поля со списком, ее ширина превышает минимальную допустимую ширину или ширину поля со списком.
Пример
Пример см. в примере SetDroppedWidth
.
CComboBox::GetEditSel
Возвращает начальные и конечные позиции символов текущего выделения в элементе управления редактированием поля со списком.
DWORD GetEditSel() const;
Возвращаемое значение
32-разрядное значение, содержащее начальную позицию в слове с низким порядком и позицию первого неизбираемого символа после окончания выделения в слове высокого порядка. Если эта функция используется в поле со списком без элемента управления редактированием, CB_ERR
возвращается.
Пример
DWORD dwSel;
// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}
CComboBox::GetExtendedUI
Вызовите функцию-член, GetExtendedUI
чтобы определить, имеет ли поле со списком пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс.
BOOL GetExtendedUI() const;
Возвращаемое значение
Ненулевое значение, если поле со списком имеет расширенный пользовательский интерфейс; в противном случае — 0.
Замечания
Расширенный пользовательский интерфейс можно определить следующим образом:
При щелчке статического элемента управления отображается поле списка только для полей со списком со стилем
CBS_DROPDOWNLIST
.Нажатие клавиши СТРЕЛКА ВНИЗ отображает поле списка (F4 отключено).
Прокрутка в статическом элементе управления отключается, если список элементов не отображается (клавиши со стрелками отключены).
Пример
// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
m_pComboBox->SetExtendedUI(TRUE);
CComboBox::GetHorizontalExtent
Извлекает из поля со списком ширину в пикселях, с помощью которой часть списка поля со списком может быть прокручена по горизонтали.
UINT GetHorizontalExtent() const;
Возвращаемое значение
Ширина прокрутки части поля со списком в пикселях.
Замечания
Это применимо только в том случае, если часть списка поля со списком имеет горизонтальную полосу прокрутки.
Пример
// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strText);
sz = pDCCombo->GetTextExtent(strText);
if (sz.cx > (LONG)dxText)
dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);
// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
m_pComboBox->SetHorizontalExtent(dxText);
ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}
CComboBox::GetItemData
Извлекает 32-разрядное значение, предоставленное приложением, связанное с указанным элементом со списком.
DWORD_PTR GetItemData(int nIndex) const;
Параметры
nIndex
Содержит отсчитываемый от нуля индекс элемента в поле списка со списком.
Возвращаемое значение
32-разрядное значение, связанное с элементом, или CB_ERR
если возникает ошибка.
Замечания
32-разрядное значение можно задать с dwItemData
параметром SetItemData
вызова функции-члена. Используйте функцию-член, GetItemDataPtr
если извлекаемое 32-разрядное значение является указателем (void
*).
Пример
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemData(i) == 0)
{
m_pComboBox->SetItemData(i, (DWORD)-1);
}
}
CComboBox::GetItemDataPtr
Извлекает 32-разрядное значение, предоставленное приложением, связанное с указанным элементом со списком (void
*).
void* GetItemDataPtr(int nIndex) const;
Параметры
nIndex
Содержит отсчитываемый от нуля индекс элемента в поле списка со списком.
Возвращаемое значение
Извлекает указатель или -1, если возникает ошибка.
Пример
LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);
// Check all the items in the combo box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemDataPtr(i) == lpmyPtr)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
}
CComboBox::GetItemHeight
Вызовите функцию-член, GetItemHeight
чтобы получить высоту элементов списка в поле со списком.
int GetItemHeight(int nIndex) const;
Параметры
nIndex
Указывает компонент поля со списком, высота которого требуется извлечь. nIndex
Если параметр равен -1, то извлекается высота части поля со списком правки (или статического текста). Если поле со списком имеет CBS_OWNERDRAWVARIABLE
стиль, указывает отсчитываемый от нуля индекс элемента списка, nIndex
высота которого требуется извлечь. nIndex
В противном случае следует задать значение 0.
Возвращаемое значение
Высота в пикселях указанного элемента в поле со списком. Возвращаемое значение имеет значение CB_ERR
, если возникает ошибка.
Пример
// Set the height of every item so the item
// is completely visible.
CString strLBText;
CSize size;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strLBText);
size = pDC->GetTextExtent(strLBText);
// Only want to set the item height if the current height
// is not big enough.
if (m_pComboBox->GetItemHeight(i) < size.cy)
m_pComboBox->SetItemHeight(i, size.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::GetLBText
Возвращает строку из списка поля со списком.
int GetLBText(
int nIndex,
LPTSTR lpszText) const;
void GetLBText(
int nIndex,
CString& rString) const;
Параметры
nIndex
Содержит отсчитываемый от нуля индекс строки списка для копирования.
lpszText
Указывает на буфер, который требуется получить строку. Буфер должен иметь достаточно места для строки и завершающего символа NULL.
rString
Ссылка на CString
.
Возвращаемое значение
Длина строки (в байтах), за исключением завершающего символа NULL. Если nIndex
не указан допустимый индекс, возвращается CB_ERR
возвращаемое значение.
Замечания
Вторая форма этой функции-члена заполняет CString
объект текстом элемента.
Если nIndex
значение недопустимо, эта функция создает E_INVALIDARG
исключение (код ошибки: -2147024809
, ). 0x80070057
Пример
// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
n = m_pComboBox->GetLBTextLen(i);
m_pComboBox->GetLBText(i, str1.GetBuffer(n));
str1.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str1.GetBuffer(0));
AFXDUMP(str2);
}
CComboBox::GetLBTextLen
Возвращает длину строки в поле со списком.
int GetLBTextLen(int nIndex) const;
Параметры
nIndex
Содержит отсчитываемый от нуля индекс строки списка.
Возвращаемое значение
Длина строки в байтах, за исключением конца символа NULL. Если nIndex
не указан допустимый индекс, возвращается CB_ERR
возвращаемое значение.
Пример
Пример см. в примере CComboBox::GetLBText
.
CComboBox::GetLocale
Извлекает языковой стандарт, используемый полем со списком.
LCID GetLocale() const;
Возвращаемое значение
Значение идентификатора языкового стандарта (LCID) для строк в поле со списком.
Замечания
Языковой стандарт используется, например, для определения порядка сортировки строк в поле со списком.
Пример
Пример см. в примере CComboBox::SetLocale
.
CComboBox::GetMinVisible
Возвращает минимальное количество видимых элементов в раскрывающемся списке текущего элемента управления со списком со списком.
int GetMinVisible() const;
Возвращаемое значение
Минимальное количество видимых элементов в текущем раскрывающемся списке.
Замечания
Этот метод отправляет CB_GETMINVISIBLE
сообщение, описанное в пакете SDK для Windows.
CComboBox::GetTopIndex
Извлекает отсчитываемый от нуля индекс первого видимого элемента в списке части поля со списком.
int GetTopIndex() const;
Возвращаемое значение
Отсчитываемый от нуля индекс первого видимого элемента в списке в поле со списком в случае успешного выполнения. CB_ERR
Замечания
Изначально элемент 0 находится в верхней части списка, но если поле списка прокручивается, другой элемент может находиться вверху.
Пример
// Want an item in the bottom half to be the first visible item.
int nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
m_pComboBox->SetTopIndex(nTop);
ASSERT(m_pComboBox->GetTopIndex() == nTop);
}
CComboBox::InitStorage
Выделяет память для хранения элементов списка в части поля со списком.
int InitStorage(
int nItems,
UINT nBytes);
Параметры
nItems
Указывает количество добавляемых элементов.
nBytes
Указывает объем памяти в байтах, выделяемый для строк элементов.
Возвращаемое значение
В случае успешного выполнения максимальное количество элементов, которые может храниться в списке, прежде чем требуется перемещение памяти, в противном случае CB_ERRSPACE
означает, что недостаточно памяти доступно.
Замечания
Вызовите эту функцию перед добавлением большого количества элементов в часть CComboBox
списка.
Только Windows 95/98: параметр wParam
ограничен 16-разрядными значениями. Это означает, что поля списков не могут содержать более 32 767 элементов. Хотя количество элементов ограничено, общий размер элементов в списке ограничен только доступной памятью.
Эта функция помогает ускорить инициализацию полей списка с большим количеством элементов (более 100). Он предварительно выделяет указанный объем памяти, чтобы последующие AddString
InsertString
Dir
функции и функции занимают самое короткое время. Вы можете использовать оценки для параметров. Если вы переоцените, выделена дополнительная память; Если вы недооцениваете, обычное выделение используется для элементов, превышающих предварительно выделенный объем.
Пример
// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);
// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
strAdd.Format(_T("item string %d"), i);
m_pComboBox->AddString(strAdd);
}
CComboBox::InsertString
Вставляет строку в список поля со списком.
int InsertString(
int nIndex,
LPCTSTR lpszString);
Параметры
nIndex
Содержит отсчитываемый от нуля индекс позиции в списке, в которую будет вставлена строка. Если этот параметр равен -1, строка добавляется в конец списка.
lpszString
Указывает на оканчивающуюся символом NULL строку, которую нужно вставить.
Возвращаемое значение
Отсчитываемый от нуля индекс позиции, в которую была вставлена строка. Возвращаемое значение имеет значение CB_ERR
, если возникает ошибка. Возвращаемое значение имеет CB_ERRSPACE
значение, если недостаточно места для хранения новой строки.
Замечания
AddString
В отличие от функции-члена, InsertString
функция-член не приводит к сортировке списка со CBS_SORT
стилем.
Примечание.
Эта функция не поддерживается элементом управления Windows ComboBoxEx
. Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx
"Элементы управления " в пакете SDK для Windows.
Пример
// Insert items in between existing items.
CString strIns;
int nItems = m_pComboBox->GetCount();
for (int i = 0; i < nItems; i++)
{
strIns.Format(_T("item string %c"), (char)('A' + i));
m_pComboBox->InsertString(2 * i, strIns);
}
CComboBox::LimitText
Ограничивает длину в байтах текста, который пользователь может ввести в элемент управления редактированием поля со списком.
BOOL LimitText(int nMaxChars);
Параметры
nMaxChars
Указывает длину (в байтах) текста, в который пользователь может ввести. Если этот параметр равен 0, длина текста равна 65 535 байтам.
Возвращаемое значение
Ненулевое значение в случае успешного выполнения. Если вызывается поле со списком со стилем CBS_DROPDOWNLIST
или полем со списком без элемента управления редактированием, возвращается CB_ERR
значение.
Замечания
Если поле со списком не имеет стиля CBS_AUTOHSCROLL
, установка ограничения текста на размер элемента управления редактирования не будет иметь эффекта.
LimitText
только ограничивает текст, который пользователь может ввести. Он не влияет на любой текст, который уже находится в элементе управления редактирования при отправке сообщения, и не влияет на длину текста, скопированного в элемент управления редактирования при выборе строки в поле списка.
Пример
// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.
// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);
CRect rect;
m_pComboBox->GetClientRect(&rect);
m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);
CComboBox::MeasureItem
Вызывается платформой при создании поля со списком с стилем рисования владельца.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Параметры
lpMeasureItemStruct
Длинный указатель на структуру MEASUREITEMSTRUCT
.
Замечания
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член и заполните MEASUREITEMSTRUCT
структуру, чтобы сообщить Windows о измерениях списка в поле со списком. Если поле со списком CBS_OWNERDRAWVARIABLE
создается с помощью стиля, платформа вызывает эту функцию-член для каждого элемента в списке. В противном случае этот элемент вызывается только один раз.
CBS_OWNERDRAWFIXED
Использование стиля в поле со списком владельца, созданном SubclassDlgItem
с помощью функции-членаCWnd
, включает дополнительные рекомендации по программированию. См. обсуждение в Техническом примечание 14.
См CWnd::OnMeasureItem
. описание MEASUREITEMSTRUCT
структуры.
Пример
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);
if (lpMeasureItemStruct->itemID != (UINT)-1)
{
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
}
CComboBox::Paste
Вставляет данные из буфера обмена в элемент управления редактированием поля со списком в текущей позиции курсора.
void Paste();
Замечания
Данные вставляются только в том случае, если буфер обмена содержит данные в CF_TEXT
формате.
Пример
// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();
CComboBox::ResetContent
Удаляет все элементы из списка и редактирует элемент управления со списком.
void ResetContent();
Пример
// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);
CComboBox::SelectString
Выполняет поиск строки в поле со списком поля со списком и если строка найдена, выбирает строку в поле списка и копирует ее в элемент управления редактирования.
int SelectString(
int nStartAfter,
LPCTSTR lpszString);
Параметры
nStartAfter
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter
. Если значение -1, все поле списка выполняется в начале поиска.
lpszString
Указывает на строку, завершающую значение NULL, содержащую префикс для поиска. Поиск является независимым от регистра, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Возвращаемое значение
Отсчитываемый от нуля индекс выбранного элемента, если строка найдена. Если поиск был неудачным, возвращается CB_ERR
значение и текущий выбор не изменяется.
Замечания
Строка выбирается только в том случае, если его начальные символы (из начальной точки) соответствуют символам в строке префикса.
Обратите внимание, что функции-члены SelectString
находят FindString
строку, но SelectString
функция-член также выбирает строку.
Пример
// The string to match.
LPCTSTR lpszSelect = _T("item");
// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);
CComboBox::SetCueBanner
Задает текст подсказки, отображаемый для элемента управления со списком.
BOOL SetCueBanner(LPCTSTR lpszText);
Параметры
lpszText
[in] Указатель на буфер, завершающийся значением NULL, содержащий текст подсказки.
Возвращаемое значение
Значение TRUE
, если метод выполнен успешно; в противном случае — значение FALSE
.
Замечания
Текст cue — это запрос, отображаемый в области ввода элемента управления со списком. Текст подсказки отображается до тех пор, пока пользователь не предоставит входные данные.
Этот метод отправляет CB_SETCUEBANNER
сообщение, описанное в пакете SDK для Windows.
Пример
Первый пример кода определяет переменную, m_combobox
которая используется для программного доступа к элементу управления полем со списком. Эта переменная используется в следующем примере.
// Variable to access the combo box control
CComboBox m_combobox;
Следующий пример кода задает баннер подсказки для элемента управления со списком.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetCurSel
Выбирает строку в списке поля со списком.
int SetCurSel(int nSelect);
Параметры
nSelect
Указывает отсчитываемый от нуля индекс строки для выбора. Если значение -1, удаляется любой текущий выбор в поле списка и элемент управления редактированием удаляется.
Возвращаемое значение
Отсчитываемый от нуля индекс элемента, выбранный в случае успешного выполнения сообщения. Возвращаемое значение имеет CB_ERR
значение , если nSelect
больше числа элементов в списке или nSelect
если задано значение -1, то оно очищает выделение.
Замечания
При необходимости поле списка прокрутит строку в представление (если поле списка отображается). Текст в элементе управления редактированием поля со списком изменяется, чтобы отразить новый выбор. Удаляется любой предыдущий выбор в списке.
Пример
// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
m_pComboBox->SetCurSel(nLast);
CComboBox::SetDroppedWidth
Вызовите эту функцию, чтобы задать минимальную допустимую ширину (в пикселях) списка поля со списком.
int SetDroppedWidth(UINT nWidth);
Параметры
nWidth
Минимальная допустимая ширина части поля со списком в пикселях.
Возвращаемое значение
В случае успешного выполнения новая ширина поля списка, в противном случае CB_ERR
.
Замечания
Эта функция применяется только к полям со списком или стилем CBS_DROPDOWN
CBS_DROPDOWNLIST
.
По умолчанию минимальная допустимая ширина раскрывающегося списка равна 0. Когда отображается часть списка поля со списком, ее ширина превышает минимальную допустимую ширину или ширину поля со списком.
Пример
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);
// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);
CComboBox::SetEditSel
Выбирает символы в элементе управления редактированием поля со списком.
BOOL SetEditSel(
int nStartChar,
int nEndChar);
Параметры
nStartChar
Указывает начальную позицию. Если начальная позиция имеет значение -1, удаляется любой существующий выбор.
nEndChar
Указывает конечную позицию. Если конечное положение имеет значение -1, то выбран весь текст из начальной позиции до последнего символа в элементе управления редактированием.
Возвращаемое значение
Ненулевое значение, если функция-член выполнена успешно; в противном случае — 0. Это если CB_ERR
CComboBox
стиль CBS_DROPDOWNLIST
или нет поля списка.
Замечания
Позиции основаны на нулях. Чтобы выбрать первый символ элемента управления редактированием, укажите начальную позицию 0. Конечной позицией является символ сразу после выбора последнего символа. Например, чтобы выбрать первые четыре символа элемента управления редактированием, вы будете использовать начальную позицию 0 и конечную позицию 4.
Примечание.
Эта функция не поддерживается элементом управления Windows ComboBoxEx
. Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx
"Элементы управления " в пакете SDK для Windows.
Пример
Пример см. в примере CComboBox::GetEditSel
.
CComboBox::SetExtendedUI
Вызовите функцию-член, SetExtendedUI
чтобы выбрать пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс для поля со списком CBS_DROPDOWN
CBS_DROPDOWNLIST
или стиля.
int SetExtendedUI(BOOL bExtended = TRUE);
Параметры
bExtended
Указывает, должен ли поле со списком использовать расширенный пользовательский интерфейс или пользовательский интерфейс по умолчанию. Значение выбора расширенного пользовательского интерфейса; значение TRUE
FALSE
выбирает стандартный пользовательский интерфейс.
Возвращаемое значение
CB_OKAY
Значение , если операция выполнена успешно или CB_ERR
возникает ошибка.
Замечания
Расширенный пользовательский интерфейс можно определить следующим образом:
При щелчке статического элемента управления отображается поле списка только для полей со списком со стилем
CBS_DROPDOWNLIST
.Нажатие клавиши СТРЕЛКА ВНИЗ отображает поле списка (F4 отключено).
Прокрутка в статическом элементе управления отключена, если список элементов не отображается (клавиши со стрелками отключены).
Пример
Пример см. в примере CComboBox::GetExtendedUI
.
CComboBox::SetHorizontalExtent
Задает ширину в пикселях, по которой можно прокручивать часть поля со списком по горизонтали.
void SetHorizontalExtent(UINT nExtent);
Параметры
nExtent
Указывает количество пикселей, по которым можно прокручивать часть поля со списком по горизонтали.
Замечания
Если ширина поля списка меньше этого значения, горизонтальная полоса прокрутки будет горизонтально прокручивать элементы в списке. Если ширина поля списка равна или больше этого значения, горизонтальная полоса прокрутки скрыта или, если поле со списком CBS_DISABLENOSCROLL
имеет стиль, отключено.
Пример
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings can
// be scrolled to.
m_pComboBox->SetHorizontalExtent(dx);
CComboBox::SetItemData
Задает 32-разрядное значение, связанное с указанным элементом в поле со списком.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Параметры
nIndex
Содержит отсчитываемый от нуля индекс для заданного элемента.
dwItemData
Содержит новое значение, которое необходимо связать с элементом.
Возвращаемое значение
CB_ERR
Если возникает ошибка.
Замечания
Используйте функцию-член, SetItemDataPtr
если 32-разрядный элемент должен быть указателем.
Пример
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemData(i, i);
}
CComboBox::SetItemDataPtr
Задает 32-разрядное значение, связанное с указанным элементом в поле со списком, указанным указателем (void
*).
int SetItemDataPtr(
int nIndex,
void* pData);
Параметры
nIndex
Содержит отсчитываемый от нуля индекс элемента.
pData
Содержит указатель, связанный с элементом.
Возвращаемое значение
CB_ERR
Если возникает ошибка.
Замечания
Этот указатель остается допустимым для жизни поля со списком, даже если относительная позиция элемента в поле со списком может измениться при добавлении или удалении элементов. Таким образом, индекс элемента в поле может измениться, но указатель остается надежным.
Пример
// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
CComboBox::SetItemHeight
SetItemHeight
Вызовите функцию-член, чтобы задать высоту элементов списка в поле со списком или высоту части элемента управления редактированием (или статического текста) поля со списком.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Параметры
nIndex
Указывает, задана ли высота элементов списка или высота элемента управления редактированием (или статического текста) поля со списком.
Если поле со списком имеет CBS_OWNERDRAWVARIABLE
стиль, nIndex
указывает отсчитываемый от нуля индекс элемента списка, nIndex
высота которого должна быть задана; в противном случае необходимо задать значение 0, а высота всех элементов списка будет задана.
Если nIndex
значение равно -1, то должна быть задана высота элемента управления редактированием или статического текста поля со списком.
cyItemHeight
Указывает высоту (в пикселях) компонента со списком nIndex
, определяемого по .
Возвращаемое значение
CB_ERR
Значение , если индекс или высота недопустимы; в противном случае — 0.
Замечания
Высота части поля со списком редактируемого элемента управления (или статического текста) устанавливается независимо от высоты элементов списка. Приложение должно убедиться, что высота части элемента управления редактированием (или статического текста) не меньше высоты определенного элемента списка.
Пример
// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::SetLocale
Задает идентификатор языкового стандарта для этого поля со списком.
LCID SetLocale(LCID nNewLocale);
Параметры
nNewLocale
Новое значение идентификатора языкового стандарта (LCID), заданное для поля со списком.
Возвращаемое значение
Предыдущее значение идентификатора языкового стандарта (LCID) для этого поля со списком.
Замечания
Если SetLocale
он не вызывается, языковой стандарт по умолчанию получается из системы. Этот языковой стандарт по умолчанию по умолчанию можно изменить с помощью регионального (или международного) приложения панель управления.
Пример
// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
SORT_DEFAULT);
// Force the list box to use my locale.
m_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);
CComboBox::SetMinVisibleItems
Задает минимальное количество видимых элементов в раскрывающемся списке текущего элемента управления со списком со списком.
BOOL SetMinVisibleItems(int iMinVisible);
Параметры
iMinVisible
[in] Указывает минимальное количество видимых элементов.
Возвращаемое значение
TRUE
Значение , если этот метод выполнен успешно; FALSE
в противном случае .
Замечания
Этот метод отправляет CB_SETMINVISIBLE
сообщение, описанное в пакете SDK для Windows.
Пример
Первый пример кода определяет переменную, m_combobox
которая используется для программного доступа к элементу управления полем со списком. Эта переменная используется в следующем примере.
// Variable to access the combo box control
CComboBox m_combobox;
Следующий пример кода вставляет 20 элементов в раскрывающийся список элемента управления полем со списком. Затем он указывает, что при нажатии пользователем стрелки раскрывающегося списка отображается не менее 10 элементов.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetTopIndex
Гарантирует, что определенный элемент отображается в списке части поля со списком.
int SetTopIndex(int nIndex);
Параметры
nIndex
Задает отсчитываемый от нуля индекс элемента списка.
Возвращаемое значение
Ноль при успешном выполнении или CB_ERR
при возникновении ошибки.
Замечания
Система прокручивает поле списка до тех пор, пока элемент, указанный nIndex
в верхней части списка, не будет достигнут максимальный диапазон прокрутки.
Пример
// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);
CComboBox::ShowDropDown
Отображает или скрывает поле со списком поля со списком CBS_DROPDOWN
, которое имеет или CBS_DROPDOWNLIST
стиль.
void ShowDropDown(BOOL bShowIt = TRUE);
Параметры
bShowIt
Указывает, должен ли раскрывающийся список отображаться или скрываться. Значение TRUE
поля списка. Значение скрытия FALSE
поля списка.
Замечания
По умолчанию поле со списком этого стиля будет отображаться.
Эта функция-член не влияет на поле со списком, созданное CBS_SIMPLE
с использованием стиля.
Пример
Пример см. в примере CComboBox::GetDroppedState
.
См. также
Пример КЛАВИШ CTRLBARS MFC
CWnd
Класс
Диаграмма иерархии
CWnd
Класс
CButton
Класс
CEdit
Класс
CListBox
Класс
CScrollBar
Класс
CStatic
Класс
CDialog
Класс