Класс 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_DROPDOWNCBS_DROPDOWNLIST стиля двойной щелчок не может произойти, так как один щелчок скрывает поле списка.

  • ON_CBN_DROPDOWN Список поля со списком находится в раскрывающемся списке (быть видимым). Это сообщение уведомления может возникать только для поля со списком или стилем CBS_DROPDOWNCBS_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 сообщения, необходимо подклассить элементы управления редактирования и списка поля со списком, наследовать классы и CEditCListBoxдобавлять обработчики для этих сообщений в производные классы. Дополнительные сведения см. в разделе CWnd::SubclassWindow.

Иерархия наследования

CObject

CCmdTarget

CWnd

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
Указывает на позицию и размер поля со списком. Может быть структурой RECTCRect или объектом.

pParentWnd
Указывает родительское окно поля со списком (обычно — CDialog). Это не должно быть NULL.

nID
Указывает идентификатор элемента управления поля со списком.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Вы создаете CComboBox объект на двух шагах. Сначала вызовите конструктор и вызов Create, который создает поле со списком Windows и присоединяет его к объекту CComboBox .

При Create выполнении Windows отправляет WM_NCCREATEсообщения и WM_CREATEWM_NCCALCSIZEWM_GETMINMAXINFO сообщения в поле со списком.

Эти сообщения обрабатываются по умолчанию функциями OnNcCreate, OnCreateOnNcCalcSizeи 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 структуру, содержащую сведения о типе документа.

Замечания

Элемент itemActionDRAWITEMSTRUCT структуры определяет действие рисования, которое необходимо выполнить. См 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 [CO МБ OBOXINFO'](/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_DROPDOWNCBS_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). Он предварительно выделяет указанный объем памяти, чтобы последующие AddStringInsertStringDir функции и функции занимают самое короткое время. Вы можете использовать оценки для параметров. Если вы переоцените, выделена дополнительная память; Если вы недооцениваете, обычное выделение используется для элементов, превышающих предварительно выделенный объем.

Пример

// 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_DROPDOWNCBS_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_ERRCComboBox стиль CBS_DROPDOWNLIST или нет поля списка.

Замечания

Позиции основаны на нулях. Чтобы выбрать первый символ элемента управления редактированием, укажите начальную позицию 0. Конечной позицией является символ сразу после выбора последнего символа. Например, чтобы выбрать первые четыре символа элемента управления редактированием, вы будете использовать начальную позицию 0 и конечную позицию 4.

Примечание.

Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.

Пример

Пример см. в примере CComboBox::GetEditSel.

CComboBox::SetExtendedUI

Вызовите функцию-член, SetExtendedUI чтобы выбрать пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс для поля со списком CBS_DROPDOWNCBS_DROPDOWNLIST или стиля.

int SetExtendedUI(BOOL bExtended = TRUE);

Параметры

bExtended
Указывает, должен ли поле со списком использовать расширенный пользовательский интерфейс или пользовательский интерфейс по умолчанию. Значение выбора расширенного пользовательского интерфейса; значение TRUEFALSE выбирает стандартный пользовательский интерфейс.

Возвращаемое значение

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 Класса