Поделиться через


Функции со списком

В этом документе рассматриваются функции поля со списком. Дополнительные сведения см. в следующих разделах:

Специальные функции

Существуют специальные сообщения и функции, позволяющие приложению отображать список каталогов в поле со списком, связывать данные с элементами списка в поле со списком и изменять интерфейс клавиатуры для раскрывающегося списка или раскрывающегося списка.

Списки каталогов

Приложение может добавить имена файлов или подкаталогов в поле со списком, отправив в него сообщение CB_DIR . Параметр wParam для этого сообщения указывает атрибуты добавляемых файлов, а параметр lParam — указатель на текстовую строку, определяющую спецификацию файла.

Функцию DlgDirListComboBox можно использовать для замены содержимого поля со списком в диалоговом окне. Функция заполняет поле со списком имена дисков, каталогов и файлов, которые соответствуют указанному набору критериев. Функция DlgDirSelectComboBoxEx извлекает текущий выбор в поле со списком, инициализированном DlgDirListComboBox. Эти функции позволяют пользователю выбрать диск, каталог или файл из поля со списком без ввода расположения и имени файла.

Функции DlgDirListComboBox и DlgDirSelectComboBoxEx и сообщение CB_DIR похожи на функции DlgDirList и DlgDirSelectEx и сообщение LB_DIR, используемое с полями списка.

Данные, связанные с элементами списка

Приложение может связать данные с элементами списка в поле со списком. Сообщение CB_SETITEMDATA связывает значение DWORD с элементом списка, а CB_GETITEMDATA извлекает значение, связанное с элементом списка.

В примере создания поля со списком "Нарисованный владелец" используются данные элементов для связывания константы с каждым элементом в раскрывающемся списке. Такое уникальное значение определяет каждый элемент независимо от его отсортированного положения.

Другие приложения могут использовать данные элемента для связывания дескриптора или указателя с элементом списка. В этом случае приложение может обработать сообщение WM_DELETEITEM , чтобы удалить или освободить указанный объект при удалении элемента списка.

Расширенный пользовательский интерфейс

Раскрывающихся списков и раскрывающихся списков поддерживают альтернативный интерфейс клавиатуры, называемый расширенным пользовательским интерфейсом. По умолчанию ключ F4 открывает или закрывает список, а СТРЕЛКА ВНИЗ изменяет текущий выбор. Однако в поле со списком с расширенным пользовательским интерфейсом клавиша F4 отключена и нажатие клавиши СТРЕЛКА ВНИЗ открывает раскрывающийся список. Кроме того, колесико мыши, которое обычно прокручивает элементы в списке, не имеет никакой функции при установке расширенного пользовательского интерфейса.

Чтобы выбрать пользовательский интерфейс для поля со списком, приложение может отправить CB_SETEXTENDEDUI сообщение в поле со списком. Значение TRUE для параметра wParam включает расширенный пользовательский интерфейс. Значение FALSE задает пользовательский интерфейс по умолчанию. Чтобы определить, использует ли поле со списком расширенный пользовательский интерфейс, приложение может отправить CB_GETEXTENDEDUI сообщение в поле со списком.

Cue Баннеры

Баннеры cue — это новая функция элементов управления редактирования и полей со списком. Цель баннера подсказки — предоставить пользователю указание на назначение элемента управления редактирования или поля со списком. На следующем снимке экрана показан элемент управления редактирования с текстом подсказки "Поиск".

screen shot of an edit control with the cue text

Текст баннера подсказки отображается, когда элемент управления редактирования не имеет текста или поле со списком не имеет выделения. Когда пользователь вводит текст в элемент управления редактирования или делает выделение в поле со списком, баннер подсказки исчезает. По умолчанию баннер подсказки также исчезает, когда элемент управления редактирования или поле со списком получает фокус.

Уведомления о поле со списком

Сообщения из полей со списком отправляются в виде кодов уведомлений в виде WM_COMMAND сообщений. Код уведомления хранится в высоком слове параметра wParam , и приложение может обрабатывать следующие коды уведомлений со списком.

Код уведомления Description
CBN_CLOSEUP Указывает, что список в раскрывающемся списке или раскрывающемся списке будет закрыт.
CBN_DBLCLK Указывает, что пользователь дважды щелкнул элемент списка в простом поле со списком.
CBN_DROPDOWN Указывает, что список в раскрывающемся списке или раскрывающемся списке будет открыт.
CBN_EDITCHANGE Указывает, что пользователь изменил текст в элементе управления редактированием простого или раскрывающегося списка. Этот код уведомления отправляется после отображения измененного текста.
CBN_EDITUPDATE Указывает, что пользователь изменил текст в элементе управления редактированием простого или раскрывающегося списка. Этот код уведомления отправляется перед отображением измененного текста.
CBN_ERRSPACE Указывает, что поле со списком не может выделить достаточно памяти для выполнения запроса, например добавление элемента списка.
CBN_KILLFOCUS Указывает, что поле со списком будет терять фокус ввода.
CBN_SELCHANGE Указывает, что текущий выбор изменился.
CBN_SELENDCANCEL Указывает, что выбор, сделанный в раскрывающемся списке, в то время как он был удален, следует игнорировать.
CBN_SELENDOK Указывает, что выделенный список сделал раскрывающийся список, хотя он был удален, должен быть принят.
CBN_SETFOCUS Указывает, что поле со списком получило фокус ввода.

 

Поведение поля со списком по умолчанию

В следующей таблице описываются сообщения, специально обрабатываемые предопределенной процедурой окна класса CO МБ OBOX.

Message Description
CB_ADDSTRING Отправляет сообщение LB_ADDSTRING в окно списка, чтобы добавить элемент списка.
CB_DELETESTRING Отправляет сообщение LB_DELETESTRING в окно списка для удаления элемента списка.
CB_DIR Добавляет имена файлов, соответствующие указанным атрибутам и пути к списку.
CB_FINDSTRING Отправляет сообщение LB_FINDSTRING в окно списка. Это сообщение возвращает индекс первого элемента списка, начинающегося с указанного текста.
CB_FINDSTRINGEXACT Отправляет сообщение LB_FINDSTRING в окно списка. Это сообщение возвращает индекс первого элемента списка, точно соответствующего указанному тексту.
CB_GETCOUNT Отправляет сообщение LB_GETCOUNT в окно списка. Он возвращает количество элементов списка.
CB_GETCURSEL Отправляет сообщение LB_GETCURSEL в окно списка. Он возвращает индекс выбранного в данный момент элемента, если таковой есть.
CB_GETDROPPEDCONTROLRECT Заполняет указанную структуру прямоугольника координатами экрана раскрывающегося списка.
CB_GETDROPPEDSTATE Возвращает значение TRUE , если раскрывающийся список открыт; в противном случае возвращает значение FALSE.
CB_GETDROPPEDWIDTH Возвращает минимальную допустимую ширину в пикселях раскрывающегося списка.
CB_GETEDITSEL Отправляет EM_GETSEL сообщение в элемент управления редактирования и возвращает начальную и конечную позицию текущего выбора. В раскрывающихся списках процедура окна возвращает CB_ERR.
CB_GETEXTENDEDUI Возвращает значение TRUE , если поле со списком является раскрывающимся списком или раскрывающимся списком, а флаг расширения пользовательского интерфейса задан; в противном случае возвращает значение FALSE.
CB_GETHORIZONTALEXTENT Отправляет сообщение LB_GETHORIZONTALEXTENT в окно списка. Она возвращает ширину прокрутки в пикселях раскрывающегося списка.
CB_GETITEMDATA Отправляет сообщение LB_GETITEMDATA в окно списка. Он возвращает значение, связанное с указанным элементом списка.
CB_GETITEMHEIGHT Отправляет сообщение LB_GETITEMHEIGHT в окно списка. Он возвращает высоту в пикселях указанного элемента списка, нарисованного владельцем.
CB_GETLBTEXT Отправляет сообщение LB_GETTEXT в окно списка. Он копирует указанный текст списка в указанный буфер.
CB_GETLBTEXTLEN Отправляет сообщение LB_GETTEXTLEN в окно списка. Он возвращает длину в TCHARs указанного текста списка.
CB_GETLOCALE Отправляет сообщение LB_GETLOCALE в окно списка. Он возвращает текущий языковой стандарт для списка.
CB_GETMINVISIBLE Возвращает минимальное количество видимых элементов в раскрывающемся списке поля со списком.
CB_GETTOPINDEX Отправляет сообщение LB_GETTOPINDEX в окно списка. Он возвращает индекс первого видимого элемента в раскрывающемся списке.
CB_INITSTORAGE Отправляет сообщение LB_INITSTORAGE в окно списка. Он инициализирует пространство для указанного числа элементов и указанного количества байтов для строк элементов.
CB_INSERTSTRING Отправляет сообщение LB_INSERTSTRING в окно списка. Он вставляет элемент списка в указанное положение.
CB_LIMITTEXT Отправляет EM_LIMITTEXT сообщение в элемент управления редактирования. Он задает максимальное количество символов, которые пользователь может вводить в элемент управления редактирования. В раскрывающихся списках процедура окна возвращает CB_ERR.
CB_RESETCONTENT Отправляет сообщение LB_RESETCONTENT в окно списка и удаляет содержимое списка.
CB_SELECTSTRING Отправляет сообщение LB_SELECTSTRING в окно списка. Он выбирает первый элемент списка, если он есть, который начинается с символов в указанном тексте.
CB_SETCURSEL Отправляет сообщение LB_SETCURSEL в окно списка и задает текущий выбор.
CB_SETDROPPEDWIDTH Задает минимальную допустимую ширину в пикселях раскрывающегося списка.
CB_SETEDITSEL Отправляет EM_SETSEL сообщение в элемент управления редактирования. Он выбирает указанный диапазон текста. В раскрывающихся списках процедура окна возвращает CB_ERR.
CB_SETEXTENDEDUI Задает или очищает флаг расширенного пользовательского интерфейса. Этот флаг изменяет ключи, которые открывают и закрывают список в раскрывающемся списке или раскрывающемся списке. Если поле со списком является простым полем со списком, процедура окна возвращает CB_ERR.
CB_SETHORIZONTALEXTENT Отправляет сообщение LB_SETHORIZONTALEXTENT в окно списка. Она задает ширину прокрутки (в пикселях) раскрывающегося списка.
CB_SETITEMDATA Отправляет сообщение LB_SETITEMDATA в окно списка. Он связывает указанное значение с элементом списка.
CB_SETITEMHEIGHT Отправляет сообщение LB_SETITEMHEIGHT в окно списка. Он задает высоту указанного элемента списка, нарисованного владельцем, или поля выбора.
CB_SETLOCALE Отправляет сообщение LB_SETLOCALE в окно списка и задает текущий языковой стандарт для списка. Языковой стандарт влияет на сортировку списка при добавлении CBS_SORT стиля и строк с помощью CB_ADDSTRING.
CB_SETMINVISIBLE Задает минимальное количество видимых элементов в раскрывающемся списке поля со списком.
CB_SETTOPINDEX Отправляет сообщение LB_SETTOPINDEX в окно списка. Он прокручивает раскрывающийся список, поэтому указанный элемент находится в верхней части видимого диапазона.
CB_SHOWDROPDOWN Отображает или скрывает раскрывающийся список. Это сообщение не влияет на простые поля со списком.
WM_CHAR Обрабатывает входные данные символов. В раскрывающихся списках это сообщение передается в окно списка, которое перемещает выделение на первый элемент, начиная с указанного символа. В простых и раскрывающихся полях это сообщение передается в элемент управления редактирования.
WM_CLEAR Удаляет выделенный фрагмент редактирования. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение. В раскрывающихся списках процедура окна возвращает CB_ERR.
WM_COMMAND Обрабатывает сообщения уведомлений из окна элемента управления редактирования и списка и отправляет соответствующие коды уведомлений со списком в родительское окно.
Для уведомлений об изменении элементов управления процедура окна может обновить текущий выбор окна списка, индекс курсора и верхний индекс. Для сообщений уведомлений о списке процедура окна может обновить содержимое поля выбора.
WM_COMPAREITEM Передает сообщение родительскому окну, что позволяет приложению указать относительное положение сортировки двух элементов списка, нарисованных владельцем. Окно со списком получает это сообщение из окна списка.
WM_COPY Копирует выделение редактирования в буфер обмена. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение. В раскрывающихся списках процедура окна возвращает CB_ERR.
WM_CREATE Инициализирует поле со списком.
WM_CUT Удаляет выделение редактирования и помещает его в буфер обмена. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение. В раскрывающихся списках процедура окна возвращает CB_ERR.
WM_DELETEITEM Передает сообщение в родительское окно, уведомляя приложение о том, что элемент списка был удален. Окно со списком получает это сообщение из окна списка.
WM_DRAWITEM Передает сообщение в родительское окно, позволяющее приложению нарисовать указанный элемент списка. Окно со списком получает это сообщение из окна списка. Процедура окна также может создать это сообщение, чтобы приложение закрашило поле выбора раскрывающегося списка.
WM_ENABLE Задает состояние для включения или запрета ввода мыши и клавиатуры.
WM_ERASEBKGND Возвращает значение 1, указывающее, что фон удаляется.
WM_GETDLGCODE Возвращает сочетание значений DLG_WANTCHARS и DLGC_WANTARROWS.
WM_GETFONT Возвращает дескриптор текущего шрифта, с помощью которого поле со списком нарисует текст.
WM_GETTEXT Копирует содержимое поля выбора в указанный буфер. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение.
WM_GETTEXTLENGTH Возвращает длину в символах текста в поле выделения. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение.
WM_KEYDOWN Обрабатывает нехарактерные входные данные клавиатуры. В раскрывающихся списках это сообщение отправляется в окно списка, которое может показать или скрыть себя, или изменить текущий выделенный или курсорный индекс. В простых и раскрывающихся полях это сообщение передается в элемент управления редактирования. Элемент управления редактирования передает определенные ключи в окно списка, такие как клавиши СТРЕЛКА ВВЕРХ и СТРЕЛКА ВНИЗ и клавиша F4.
WM_KILLFOCUS Скрывает выделение в поле выбора и закрывает раскрывающийся список при необходимости. Если окно, получающее фокус ввода, является частью поля со списком (например, элемент управления редактирования), это сообщение игнорируется.
WM_LBUTTONDBLCLK То же, что и WM_LBUTTONDOWN.
WM_LBUTTONDOWN Задает фокус в поле со списком, а для раскрывающихся списков и раскрывающихся списков может открывать или закрывать список. Если откроется список, процедура окна фиксирует мышь, чтобы включить выбор, перетаскивая и освобождая кнопку мыши.
WM_LBUTTONUP Освобождает запись мыши, если мышь открыла список.
WM_MEASUREITEM Отправляет сообщение в родительское окно, что позволяет приложению изменять содержимое указанной структуры MEASUREITEMSTRUCT . Окно со списком получает это сообщение из окна списка.
WM_MOUSEMOVE Отправляет сообщение в окно списка, если мышь открыла список и кнопка мыши по-прежнему вниз. Это позволяет пользователю выбрать элемент, перетащив указатель мыши на элемент списка, а затем отпустив кнопку.
WM_NCCREATE Выделяет внутреннюю структуру данных, используемую процедурой окна со списком.
WM_NCDESTROY Освобождает ресурсы, выделенные в ответ на сообщение WM_NCCREATE.
WM_PAINT Закрашивает недопустимый регион поля со списком. Если wParam не имеет значения NULL, предполагается, что он является дескриптором контекста устройства (DC), передаваемым из функции подкласса. Процедура окна использует указанный контроллер домена вместо вызова BeginPaint и EndPaint.
WM_PASTE Заменяет выделение правки содержимым буфера обмена. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение. В раскрывающихся списках процедура окна возвращает CB_ERR.
WM_SETFOCUS Задает фокус элементу управления редактирования или в раскрывающихся списках перевернут поле выбора и включает курсор в окне списка.
WM_SETFONT Сохраняет указанный дескриптор шрифта во внутренней структуре, настраивает размеры поля выбора и списка и делает окно со списком недействительным. Текст в поле выделения и список отображается в сохраненном шрифте.
WM_SETREDRAW Задает или очищает флаг перерасчета. Если флаг перерисовки очищается, поле со списком не переопределено, пока флаг не будет установлен снова.
WM_SETTEXT Задает содержимое элемента управления редактирования. В простых и раскрывающихся окнах элемент управления редактированием обрабатывает это сообщение. В раскрывающихся списках процедура окна возвращает CB_ERR.
WM_SIZE При необходимости изменяет размер дочерних окон.
WM_SYSKEYDOWN Открывает или закрывает раскрывающийся список в зависимости от нажатия клавиши со стрелкой.

 

Все остальные сообщения передаются в функцию DefWindowProc для обработки по умолчанию.