Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс
Предоставляет функции поля со списком Windows.
Syntax
class CComboBox : public CWnd
Members
Public Constructors
| Name | Description |
|---|---|
CComboBox::CComboBox |
Формирует объект CComboBox. |
Public Methods
| Name | Description |
|---|---|
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 стиль. |
Remarks
Поле со списком состоит из поля списка в сочетании со статическим элементом управления или элементом управления редактирования. Часть списка элемента управления может отображаться в любое время или может отображаться только в том случае, если пользователь выбирает стрелку раскрывающегося списка рядом с элементом управления.
Выбранный в данный момент элемент (при наличии) в списке отображается в статическом или редактируемом элементе управления. Кроме того, если поле со списком имеет стиль раскрывающегося списка, пользователь может ввести начальный символ одного из элементов в списке, а поле списка, если отображается, выделите следующий элемент с этим начальным символом.
В следующей таблице сравниваются три стиля со списком.
| Style | Если отображается поле списка | Статический или редактируемый элемент управления |
|---|---|---|
| Simple | Always | Edit |
| Drop-down | При удалении вниз | Edit |
| Drop-down list | При удалении вниз | Static |
Объект можно создать 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.
Inheritance Hierarchy
CComboBox
Requirements
Header:afxwin.h
CComboBox::AddString
Добавляет строку в поле списка поля со списком.
int AddString(LPCTSTR lpszString);
Parameters
lpszString
Указывает на строку, завершающуюся значением NULL, которая должна быть добавлена.
Return Value
Если возвращаемое значение больше или равно 0, это отсчитываемый от нуля индекс строки в поле списка. Возвращаемое значение имеет значение CB_ERR , если возникает ошибка; возвращаемое значение CB_ERRSPACE имеется, если недостаточно места для хранения новой строки.
Remarks
Если поле списка не было создано со стилем CBS_SORT , строка добавляется в конец списка. В противном случае строка вставляется в список, а список отсортирован.
Note
Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.
Чтобы вставить строку в определенное расположение в списке, используйте функцию-член InsertString .
Example
// 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();
Example
// Declare a local CComboBox object.
CComboBox myComboBox;
// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;
CComboBox::Clear
Удаляет (очищает) текущий выделенный фрагмент( если таковой есть) в элементе управления редактированием поля со списком.
void Clear();
Remarks
Чтобы удалить текущий выбор и поместить удаленное содержимое в буфер обмена, используйте функцию-член Cut .
Example
// 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);
Parameters
lpCompareItemStruct
Длинный указатель на структуру COMPAREITEMSTRUCT .
Return Value
Указывает относительную позицию двух элементов, описанных в COMPAREITEMSTRUCT структуре. В качестве такой точки может выступать любой из следующих вариантов:
| Value | Meaning |
|---|---|
| - 1 | Элемент 1 сортируется до элемента 2. |
| 0 | Элемент 1 и элемент 2 сортируются одинаково. |
| 1 | Элемент 1 сортируется после элемента 2. |
Дополнительные сведения см CWnd::OnCompareItem . в описании COMPAREITEMSTRUCT.
Remarks
По умолчанию эта функция-член ничего не делает. Если вы создаете поле со списком владельца с LBS_SORT стилем, необходимо переопределить эту функцию-член, чтобы помочь платформе в сортировке новых элементов, добавленных в поле списка.
Example
// 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();
Example
// 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);
Parameters
dwStyle
Задает стиль поля со списком. Примените к коробке любое сочетание стилей со списком .
rect
Указывает на позицию и размер поля со списком. Может быть структурой RECTCRect или объектом.
pParentWnd
Указывает родительское окно поля со списком (обычно — CDialog). Это не должно быть NULL.
nID
Указывает идентификатор элемента управления поля со списком.
Return Value
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Remarks
Вы создаете 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Включение поля со списком в порядок табуляции
Example
m_pComboBox->Create(
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
CRect(10, 10, 200, 100), pParentWnd, 1);
CComboBox::Cut
Удаляет (вырезает) текущий выделенный фрагмент, если таковой есть, в элементе управления редактирования со списком и копирует удаленный текст в буфер обмена в CF_TEXT формате.
void Cut();
Remarks
Чтобы удалить текущее выделение без размещения удаленного текста в буфер обмена, вызовите Clear функцию-член.
Example
// 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);
Parameters
lpDeleteItemStruct
Длинный указатель на структуру Windows DELETEITEMSTRUCT , содержащую сведения об удаленном элементе. См CWnd::OnDeleteItem . описание этой структуры.
Remarks
Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы переопределить поле со списком по мере необходимости.
Example
// 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);
Parameters
nIndex
Указывает индекс для строки, которую необходимо удалить.
Return Value
Если возвращаемое значение больше или равно 0, это число строк, оставшихся в списке. Возвращаемое значение имеет CB_ERR значение, если nIndex указывает индекс, превышающий число элементов в списке.
Remarks
Все следующие элементы nIndex теперь перемещаются вниз по одной позиции. Например, если поле со списком содержит два элемента, удаление первого элемента приведет к тому, что оставшийся элемент будет находиться в первой позиции.
nIndex=0 для элемента в первой позиции.
Example
// 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);
Parameters
attr
Может быть любое сочетание значений enum , описанных в CFile::GetStatus или любом сочетании следующих значений:
DDL_READWRITEФайл можно считывать или записывать в.DDL_READONLYФайл можно считывать, но не записывать в.DDL_HIDDENФайл скрыт и не отображается в списке каталогов.DDL_SYSTEMФайл является системным файлом.DDL_DIRECTORYИмя, указанное вlpszWildCardкаталоге.DDL_ARCHIVEФайл был архивирован.DDL_DRIVESВключите все диски, соответствующие имени, заданномуlpszWildCard.DDL_EXCLUSIVEЭксклюзивный флаг. Если установлен монопольный флаг, перечислены только файлы указанного типа. В противном случае файлы указанного типа перечислены в дополнение к обычным файлам.
lpszWildCard
Указывает на строку спецификации файла. Строка может содержать подстановочные знаки (например, *.*).
Return Value
Если возвращаемое значение больше или равно 0, он является отсчитываемым от нуля индексом последнего имени файла, добавленного в список. Возвращаемое значение имеет значение CB_ERR , если возникает ошибка; возвращаемое значение CB_ERRSPACE имеется, если недостаточно места для хранения новых строк.
Remarks
Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.
Example
// 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);
Parameters
lpDrawItemStruct
Указатель на DRAWITEMSTRUCT структуру, содержащую сведения о типе документа.
Remarks
Элемент itemActionDRAWITEMSTRUCT структуры определяет действие рисования, которое необходимо выполнить. См CWnd::OnDrawItem . описание этой структуры.
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член, чтобы реализовать рисование для объекта owner-draw CComboBox . Прежде чем эта функция-член завершится, приложение должно восстановить все объекты интерфейса графического устройства (GDI), выбранные для контекста отображения, указанного в lpDrawItemStruct.
Example
// 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;
Parameters
nStartAfter
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter. Если значение -1, все поле списка выполняется в начале поиска.
lpszString
Указывает на строку, завершающую значение NULL, содержащую префикс для поиска. Поиск является независимым от регистра, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Return Value
Если возвращаемое значение больше или равно 0, это отсчитываемый от нуля индекс соответствующего элемента. Это если CB_ERR поиск был неудачным.
Remarks
Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.
Example
// 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;
Parameters
nIndexStart
Указывает отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nIndexStart. Если nIndexStart значение равно -1, вся поле списка выполняется поиск с самого начала.
lpszFind
Указывает на строку, завершаемую значением NULL, для поиска. Эта строка может содержать полное имя файла, включая расширение. Поиск не учитывает регистр, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Return Value
Отсчитываемый от нуля индекс соответствующего элемента или CB_ERR если поиск был неудачным.
Remarks
Если поле со списком было создано с стилем рисования владельца, но без CBS_HASSTRINGS стиля, FindStringExact пытается сопоставить значение doubleword со значением lpszFind.
Example
// 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;
Parameters
pcbi
Указатель на структуру COMBOBOXINFO .
Return Value
Возвращает успешность TRUE при FALSE сбое.
Remarks
Эта функция-член эмулирует функциональные возможности CB_GETCOMBOBOXINFO сообщения, как описано в пакете SDK для Windows.
CComboBox::GetCount
Вызовите эту функцию-член, чтобы получить количество элементов в списке части поля со списком.
int GetCount() const;
Return Value
Количество элементов. Возвращаемое число больше, чем значение индекса последнего элемента (индекс является отсчитываемым от нуля). Это происходит CB_ERR при возникновении ошибки.
Example
// 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;
Parameters
lpszText
[out] Указатель на буфер, который получает текст баннера подсказки.
cchText
[in] Размер буфера, на который lpszText указывает параметр.
Return Value
В первой перегрузке объект, CString содержащий текст баннера подсказки, если он существует; в противном случае CString объект с нулевой длиной.
-or-
Вторая перегрузка, TRUE если этот метод выполнен успешно; в противном случае FALSE.
Remarks
Текст cue — это запрос, отображаемый в области ввода элемента управления со списком. Текст подсказки отображается до тех пор, пока пользователь не предоставит входные данные.
Этот метод отправляет CB_GETCUEBANNER сообщение, описанное в пакете SDK для Windows.
CComboBox::GetCurSel
Вызовите эту функцию-член, чтобы определить, какой элемент в поле со списком выбран.
int GetCurSel() const;
Return Value
Отсчитываемый от нуля индекс выбранного элемента в списке поля со списком или CB_ERR если элемент не выбран.
Remarks
GetCurSel возвращает индекс в список.
Example
// 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;
Parameters
lprect
Указывает на структуру RECT, которая требуется получить координаты.
Example
// 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;
Return Value
Ненулевое значение, если поле списка отображается; в противном случае — 0.
Example
// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
m_pComboBox->ShowDropDown(TRUE);
CComboBox::GetDroppedWidth
Вызовите эту функцию, чтобы получить минимальную допустимую ширину (в пикселях) списка поля со списком.
int GetDroppedWidth() const;
Return Value
В случае успешного выполнения минимальная допустимая ширина в пикселях; CB_ERRв противном случае .
Remarks
Эта функция применяется только к полям со списком или стилем CBS_DROPDOWNCBS_DROPDOWNLIST .
По умолчанию минимальная допустимая ширина раскрывающегося списка равна 0. Минимальная допустимая ширина может быть задана путем вызова SetDroppedWidth. Когда отображается часть списка поля со списком, ее ширина превышает минимальную допустимую ширину или ширину поля со списком.
Example
Пример см. в примере SetDroppedWidth.
CComboBox::GetEditSel
Возвращает начальные и конечные позиции символов текущего выделения в элементе управления редактированием поля со списком.
DWORD GetEditSel() const;
Return Value
32-разрядное значение, содержащее начальную позицию в слове с низким порядком и позицию первого неизбираемого символа после окончания выделения в слове высокого порядка. Если эта функция используется в поле со списком без элемента управления редактированием, CB_ERR возвращается.
Example
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;
Return Value
Ненулевое значение, если поле со списком имеет расширенный пользовательский интерфейс; в противном случае — 0.
Remarks
Расширенный пользовательский интерфейс можно определить следующим образом:
При щелчке статического элемента управления отображается поле списка только для полей со списком со стилем
CBS_DROPDOWNLIST.Нажатие клавиши СТРЕЛКА ВНИЗ отображает поле списка (F4 отключено).
Прокрутка в статическом элементе управления отключается, если список элементов не отображается (клавиши со стрелками отключены).
Example
// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
m_pComboBox->SetExtendedUI(TRUE);
CComboBox::GetHorizontalExtent
Извлекает из поля со списком ширину в пикселях, с помощью которой часть списка поля со списком может быть прокручена по горизонтали.
UINT GetHorizontalExtent() const;
Return Value
Ширина прокрутки части поля со списком в пикселях.
Remarks
Это применимо только в том случае, если часть списка поля со списком имеет горизонтальную полосу прокрутки.
Example
// 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;
Parameters
nIndex
Содержит отсчитываемый от нуля индекс элемента в поле списка со списком.
Return Value
32-разрядное значение, связанное с элементом, или CB_ERR если возникает ошибка.
Remarks
32-разрядное значение можно задать с dwItemData параметром SetItemData вызова функции-члена. Используйте функцию-член, GetItemDataPtr если извлекаемое 32-разрядное значение является указателем (void*).
Example
// 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;
Parameters
nIndex
Содержит отсчитываемый от нуля индекс элемента в поле списка со списком.
Return Value
Извлекает указатель или -1, если возникает ошибка.
Example
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;
Parameters
nIndex
Указывает компонент поля со списком, высота которого требуется извлечь.
nIndex Если параметр равен -1, то извлекается высота части поля со списком правки (или статического текста). Если поле со списком имеет CBS_OWNERDRAWVARIABLE стиль, указывает отсчитываемый от нуля индекс элемента списка, nIndex высота которого требуется извлечь.
nIndex В противном случае следует задать значение 0.
Return Value
Высота в пикселях указанного элемента в поле со списком. Возвращаемое значение имеет значение CB_ERR , если возникает ошибка.
Example
// 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;
Parameters
nIndex
Содержит отсчитываемый от нуля индекс строки списка для копирования.
lpszText
Указывает на буфер, который требуется получить строку. Буфер должен иметь достаточно места для строки и завершающего символа NULL.
rString
Ссылка на CString.
Return Value
Длина строки (в байтах), за исключением завершающего символа NULL. Если nIndex не указан допустимый индекс, возвращается CB_ERRвозвращаемое значение.
Remarks
Вторая форма этой функции-члена заполняет CString объект текстом элемента.
Если nIndex значение недопустимо, эта функция создает E_INVALIDARG исключение (код ошибки: -2147024809, ). 0x80070057
Example
// 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;
Parameters
nIndex
Содержит отсчитываемый от нуля индекс строки списка.
Return Value
Длина строки в байтах, за исключением конца символа NULL. Если nIndex не указан допустимый индекс, возвращается CB_ERRвозвращаемое значение.
Example
Пример см. в примере CComboBox::GetLBText.
CComboBox::GetLocale
Извлекает языковой стандарт, используемый полем со списком.
LCID GetLocale() const;
Return Value
Значение идентификатора языкового стандарта (LCID) для строк в поле со списком.
Remarks
Языковой стандарт используется, например, для определения порядка сортировки строк в поле со списком.
Example
Пример см. в примере CComboBox::SetLocale.
CComboBox::GetMinVisible
Возвращает минимальное количество видимых элементов в раскрывающемся списке текущего элемента управления со списком со списком.
int GetMinVisible() const;
Return Value
Минимальное количество видимых элементов в текущем раскрывающемся списке.
Remarks
Этот метод отправляет CB_GETMINVISIBLE сообщение, описанное в пакете SDK для Windows.
CComboBox::GetTopIndex
Извлекает отсчитываемый от нуля индекс первого видимого элемента в списке части поля со списком.
int GetTopIndex() const;
Return Value
Отсчитываемый от нуля индекс первого видимого элемента в списке в поле со списком в случае успешного выполнения. CB_ERR
Remarks
Изначально элемент 0 находится в верхней части списка, но если поле списка прокручивается, другой элемент может находиться вверху.
Example
// 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);
Parameters
nItems
Указывает количество добавляемых элементов.
nBytes
Указывает объем памяти в байтах, выделяемый для строк элементов.
Return Value
В случае успешного выполнения максимальное количество элементов, которые может храниться в списке, прежде чем требуется перемещение памяти, в противном случае CB_ERRSPACEозначает, что недостаточно памяти доступно.
Remarks
Вызовите эту функцию перед добавлением большого количества элементов в часть CComboBoxсписка.
Только Windows 95/98: параметр wParam ограничен 16-разрядными значениями. Это означает, что поля списков не могут содержать более 32 767 элементов. Хотя количество элементов ограничено, общий размер элементов в списке ограничен только доступной памятью.
Эта функция помогает ускорить инициализацию полей списка с большим количеством элементов (более 100). Он предварительно выделяет указанный объем памяти, чтобы последующие AddStringInsertStringDir функции и функции занимают самое короткое время. Вы можете использовать оценки для параметров. Если вы переоцените, выделена дополнительная память; Если вы недооцениваете, обычное выделение используется для элементов, превышающих предварительно выделенный объем.
Example
// 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);
Parameters
nIndex
Содержит отсчитываемый от нуля индекс позиции в списке, в которую будет вставлена строка. Если этот параметр равен -1, строка добавляется в конец списка.
lpszString
Указывает на оканчивающуюся символом NULL строку, которую нужно вставить.
Return Value
Отсчитываемый от нуля индекс позиции, в которую была вставлена строка. Возвращаемое значение имеет значение CB_ERR , если возникает ошибка. Возвращаемое значение имеет CB_ERRSPACE значение, если недостаточно места для хранения новой строки.
Remarks
AddString В отличие от функции-члена, InsertString функция-член не приводит к сортировке списка со CBS_SORT стилем.
Note
Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.
Example
// 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);
Parameters
nMaxChars
Указывает длину (в байтах) текста, в который пользователь может ввести. Если этот параметр равен 0, длина текста равна 65 535 байтам.
Return Value
Ненулевое значение в случае успешного выполнения. Если вызывается поле со списком со стилем CBS_DROPDOWNLIST или полем со списком без элемента управления редактированием, возвращается CB_ERRзначение.
Remarks
Если поле со списком не имеет стиля CBS_AUTOHSCROLL, установка ограничения текста на размер элемента управления редактирования не будет иметь эффекта.
LimitText только ограничивает текст, который пользователь может ввести. Он не влияет на любой текст, который уже находится в элементе управления редактирования при отправке сообщения, и не влияет на длину текста, скопированного в элемент управления редактирования при выборе строки в поле списка.
Example
// 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);
Parameters
lpMeasureItemStruct
Длинный указатель на структуру MEASUREITEMSTRUCT .
Remarks
По умолчанию эта функция-член ничего не делает. Переопределите эту функцию-член и заполните MEASUREITEMSTRUCT структуру, чтобы сообщить Windows о измерениях списка в поле со списком. Если поле со списком CBS_OWNERDRAWVARIABLE создается с помощью стиля, платформа вызывает эту функцию-член для каждого элемента в списке. В противном случае этот элемент вызывается только один раз.
CBS_OWNERDRAWFIXED Использование стиля в поле со списком владельца, созданном SubclassDlgItem с помощью функции-членаCWnd, включает дополнительные рекомендации по программированию. См. обсуждение в Техническом примечание 14.
См CWnd::OnMeasureItem . описание MEASUREITEMSTRUCT структуры.
Example
// 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();
Remarks
Данные вставляются только в том случае, если буфер обмена содержит данные в CF_TEXT формате.
Example
// 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();
Example
// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);
CComboBox::SelectString
Выполняет поиск строки в поле со списком поля со списком и если строка найдена, выбирает строку в поле списка и копирует ее в элемент управления редактирования.
int SelectString(
int nStartAfter,
LPCTSTR lpszString);
Parameters
nStartAfter
Содержит отсчитываемый от нуля индекс элемента перед поиском первого элемента. Когда поиск достигает нижней части поля списка, он продолжается с верхней части поля списка обратно к элементу, указанному nStartAfter. Если значение -1, все поле списка выполняется в начале поиска.
lpszString
Указывает на строку, завершающую значение NULL, содержащую префикс для поиска. Поиск является независимым от регистра, поэтому эта строка может содержать любое сочетание прописных и строчных букв.
Return Value
Отсчитываемый от нуля индекс выбранного элемента, если строка найдена. Если поиск был неудачным, возвращается CB_ERR значение и текущий выбор не изменяется.
Remarks
Строка выбирается только в том случае, если его начальные символы (из начальной точки) соответствуют символам в строке префикса.
Обратите внимание, что функции-члены SelectString находят FindString строку, но SelectString функция-член также выбирает строку.
Example
// 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);
Parameters
lpszText
[in] Указатель на буфер, завершающийся значением NULL, содержащий текст подсказки.
Return Value
Значение TRUE, если метод выполнен успешно; в противном случае — значение FALSE.
Remarks
Текст cue — это запрос, отображаемый в области ввода элемента управления со списком. Текст подсказки отображается до тех пор, пока пользователь не предоставит входные данные.
Этот метод отправляет CB_SETCUEBANNER сообщение, описанное в пакете SDK для Windows.
Example
Первый пример кода определяет переменную, 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);
Parameters
nSelect
Указывает отсчитываемый от нуля индекс строки для выбора. Если значение -1, удаляется любой текущий выбор в поле списка и элемент управления редактированием удаляется.
Return Value
Отсчитываемый от нуля индекс элемента, выбранный в случае успешного выполнения сообщения. Возвращаемое значение имеет CB_ERR значение , если nSelect больше числа элементов в списке или nSelect если задано значение -1, то оно очищает выделение.
Remarks
При необходимости поле списка прокрутит строку в представление (если поле списка отображается). Текст в элементе управления редактированием поля со списком изменяется, чтобы отразить новый выбор. Удаляется любой предыдущий выбор в списке.
Example
// 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);
Parameters
nWidth
Минимальная допустимая ширина части поля со списком в пикселях.
Return Value
В случае успешного выполнения новая ширина поля списка, в противном случае CB_ERR.
Remarks
Эта функция применяется только к полям со списком или стилем CBS_DROPDOWNCBS_DROPDOWNLIST .
По умолчанию минимальная допустимая ширина раскрывающегося списка равна 0. Когда отображается часть списка поля со списком, ее ширина превышает минимальную допустимую ширину или ширину поля со списком.
Example
// 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);
Parameters
nStartChar
Указывает начальную позицию. Если начальная позиция имеет значение -1, удаляется любой существующий выбор.
nEndChar
Указывает конечную позицию. Если конечное положение имеет значение -1, то выбран весь текст из начальной позиции до последнего символа в элементе управления редактированием.
Return Value
Ненулевое значение, если функция-член выполнена успешно; в противном случае — 0. Это если CB_ERRCComboBox стиль CBS_DROPDOWNLIST или нет поля списка.
Remarks
Позиции основаны на нулях. Чтобы выбрать первый символ элемента управления редактированием, укажите начальную позицию 0. Конечной позицией является символ сразу после выбора последнего символа. Например, чтобы выбрать первые четыре символа элемента управления редактированием, вы будете использовать начальную позицию 0 и конечную позицию 4.
Note
Эта функция не поддерживается элементом управления Windows ComboBoxEx . Дополнительные сведения об этом элементе управления см. в разделе ComboBoxEx "Элементы управления " в пакете SDK для Windows.
Example
Пример см. в примере CComboBox::GetEditSel.
CComboBox::SetExtendedUI
Вызовите функцию-член, SetExtendedUI чтобы выбрать пользовательский интерфейс по умолчанию или расширенный пользовательский интерфейс для поля со списком CBS_DROPDOWNCBS_DROPDOWNLIST или стиля.
int SetExtendedUI(BOOL bExtended = TRUE);
Parameters
bExtended
Указывает, должен ли поле со списком использовать расширенный пользовательский интерфейс или пользовательский интерфейс по умолчанию. Значение выбора расширенного пользовательского интерфейса; значение TRUEFALSE выбирает стандартный пользовательский интерфейс.
Return Value
CB_OKAY Значение , если операция выполнена успешно или CB_ERR возникает ошибка.
Remarks
Расширенный пользовательский интерфейс можно определить следующим образом:
При щелчке статического элемента управления отображается поле списка только для полей со списком со стилем
CBS_DROPDOWNLIST.Нажатие клавиши СТРЕЛКА ВНИЗ отображает поле списка (F4 отключено).
Прокрутка в статическом элементе управления отключена, если список элементов не отображается (клавиши со стрелками отключены).
Example
Пример см. в примере CComboBox::GetExtendedUI.
CComboBox::SetHorizontalExtent
Задает ширину в пикселях, по которой можно прокручивать часть поля со списком по горизонтали.
void SetHorizontalExtent(UINT nExtent);
Parameters
nExtent
Указывает количество пикселей, по которым можно прокручивать часть поля со списком по горизонтали.
Remarks
Если ширина поля списка меньше этого значения, горизонтальная полоса прокрутки будет горизонтально прокручивать элементы в списке. Если ширина поля списка равна или больше этого значения, горизонтальная полоса прокрутки скрыта или, если поле со списком CBS_DISABLENOSCROLL имеет стиль, отключено.
Example
// 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);
Parameters
nIndex
Содержит отсчитываемый от нуля индекс для заданного элемента.
dwItemData
Содержит новое значение, которое необходимо связать с элементом.
Return Value
CB_ERR Если возникает ошибка.
Remarks
Используйте функцию-член, SetItemDataPtr если 32-разрядный элемент должен быть указателем.
Example
// 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);
Parameters
nIndex
Содержит отсчитываемый от нуля индекс элемента.
pData
Содержит указатель, связанный с элементом.
Return Value
CB_ERR Если возникает ошибка.
Remarks
Этот указатель остается допустимым для жизни поля со списком, даже если относительная позиция элемента в поле со списком может измениться при добавлении или удалении элементов. Таким образом, индекс элемента в поле может измениться, но указатель остается надежным.
Example
// 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);
Parameters
nIndex
Указывает, задана ли высота элементов списка или высота элемента управления редактированием (или статического текста) поля со списком.
Если поле со списком имеет CBS_OWNERDRAWVARIABLE стиль, nIndex указывает отсчитываемый от нуля индекс элемента списка, nIndex высота которого должна быть задана; в противном случае необходимо задать значение 0, а высота всех элементов списка будет задана.
Если nIndex значение равно -1, то должна быть задана высота элемента управления редактированием или статического текста поля со списком.
cyItemHeight
Указывает высоту (в пикселях) компонента со списком nIndex, определяемого по .
Return Value
CB_ERR Значение , если индекс или высота недопустимы; в противном случае — 0.
Remarks
Высота части поля со списком редактируемого элемента управления (или статического текста) устанавливается независимо от высоты элементов списка. Приложение должно убедиться, что высота части элемента управления редактированием (или статического текста) не меньше высоты определенного элемента списка.
Example
// 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);
Parameters
nNewLocale
Новое значение идентификатора языкового стандарта (LCID), заданное для поля со списком.
Return Value
Предыдущее значение идентификатора языкового стандарта (LCID) для этого поля со списком.
Remarks
Если SetLocale он не вызывается, языковой стандарт по умолчанию получается из системы. Этот языковой стандарт по умолчанию по умолчанию можно изменить с помощью регионального (или международного) приложения панель управления.
Example
// 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);
Parameters
iMinVisible
[in] Указывает минимальное количество видимых элементов.
Return Value
TRUE Значение , если этот метод выполнен успешно; FALSEв противном случае .
Remarks
Этот метод отправляет CB_SETMINVISIBLE сообщение, описанное в пакете SDK для Windows.
Example
Первый пример кода определяет переменную, 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);
Parameters
nIndex
Задает отсчитываемый от нуля индекс элемента списка.
Return Value
Ноль при успешном выполнении или CB_ERR при возникновении ошибки.
Remarks
Система прокручивает поле списка до тех пор, пока элемент, указанный nIndex в верхней части списка, не будет достигнут максимальный диапазон прокрутки.
Example
// 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);
Parameters
bShowIt
Указывает, должен ли раскрывающийся список отображаться или скрываться. Значение TRUE поля списка. Значение скрытия FALSE поля списка.
Remarks
По умолчанию поле со списком этого стиля будет отображаться.
Эта функция-член не влияет на поле со списком, созданное CBS_SIMPLE с использованием стиля.
Example
Пример см. в примере CComboBox::GetDroppedState.
See also
Пример КЛАВИШ CTRLBARS MFC
CWnd Класс
Hierarchy Chart
CWnd Класс
CButton Класс
CEdit Класс
CListBox Класс
CScrollBar Класс
CStatic Класс
CDialog Класс