Функции со списком
В этом документе рассматриваются функции поля со списком. Дополнительные сведения см. в следующих разделах:
Специальные функции
Существуют специальные сообщения и функции, позволяющие приложению отображать список каталогов в поле со списком, связывать данные с элементами списка в поле со списком и изменять интерфейс клавиатуры для раскрывающегося списка или раскрывающегося списка.
- Списки каталогов
- Данные, связанные с элементами списка
- Расширенный пользовательский интерфейс
- Cue Баннеры
Списки каталогов
Приложение может добавить имена файлов или подкаталогов в поле со списком, отправив в него сообщение 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 — это новая функция элементов управления редактирования и полей со списком. Цель баннера подсказки — предоставить пользователю указание на назначение элемента управления редактирования или поля со списком. На следующем снимке экрана показан элемент управления редактирования с текстом подсказки "Поиск".
Текст баннера подсказки отображается, когда элемент управления редактирования не имеет текста или поле со списком не имеет выделения. Когда пользователь вводит текст в элемент управления редактирования или делает выделение в поле со списком, баннер подсказки исчезает. По умолчанию баннер подсказки также исчезает, когда элемент управления редактирования или поле со списком получает фокус.
Уведомления о поле со списком
Сообщения из полей со списком отправляются в виде кодов уведомлений в виде 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 для обработки по умолчанию.