Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

8.2.13. Стандартный элемент управления список с вводом

Задавая класс “combobox”, приложение определяет прямоугольное дочернее окно, которое, в простейшем случае, содержит список текстовых строк. Однако список снабжен полем ввода, где пользователь может изменить содержимое строки из списка.

Для Windows 95/98 максимальное количество строк в комбинированном списке ограничено значением 32К.

8.2.13.1. Стили элемента управления combobox

При создании комбинированного списка функцией CreateWindow() используются следующие основные стили. Можно заметить, что стили для combobox являются комбинацией рассмотренных ранее окна редактирования и элемента список.

CBS_DROPDOWN

Элемент управления состоит из выпадающего списка и окна редактирования.

CBS_DROPDOWNLIST

Окно редактирования отсутствует.

CBS_SIMPLE

Окно редактирования со списком, который виден всегда.

CBS_AUTOHSCROLL

Выполняется автоматическая горизонтальная прокрутка текста в редакторе, при этом полоса прокрутки не появляется.

CBS_SORT

Выполняется сортировка строк списка.

CBS_NOINTEGRALHEIGHT

Возможен частичный показ строк в окне списка. Если стиль не указан, то окно уменьшает свои размеры так, что его высота становится кратной высоте строк.

CBS_LOWERCASE

Переводит все вводимые в окне редактора символы в нижний регистр.

CBS_UPPERCASE

Переводит все вводимые в окне редактора символы в верхний регистр.

CBS_OEMCONVERT

Проводится конвертирование вводимого в окне редактора текста в ASCII символы.

CBS_OWNERDRAWFIXED

Элементы списка будут отрисовываться родительским окном, а не Windows.

8.2.13.2. Сообщения от combobox к родительскому окну

Ниже указаны сообщения, которые комбинированный список посылает своему родительскому окну. Часть из них является самостоятельными Windows сообщениями, а другие приходят в составе сообщения WM_COMMAND. В последнем случае старшее слово параметра wParam соответствует указанному нотификационному значению:

CBN_DROPDOWN (WM_COMMAND)

Список стал видим.

CBN_CLOSEUP (WM_COMMAND)

Список стал невидим.

CBN_DBLCLK (WM_COMMAND)

Пользователь сделал двойной щелчок клавишей мыши по строке списка.

CBN_SELCHANGE (WM_COMMAND)

Пользователь выбрал строку в списке.

CBN_SELCANCEL (WM_COMMAND)

Пользователь отменил выбор.

CBN_SETFOCUS CBN_KILLFOCUS (WM_COMMAND)

Комбинированный список получает или теряет фокус ввода.

CBN_EDITUPDATE (WM_COMMAND)

Пользователь изменил текст в окне редактирования, но изменения еще не отображены.

CBN_EDITCHANGE (WM_COMMAND)

Изменения уже отображены в окне редактирования.

8.2.13.3. Сообщения от родительского окна к combobox

Ниже представлены основные сообщения, с помощью которых родительское окно может управлять элементом combobox. Напомним, что комбинированный список может возвращать информацию родительскому окну из некоторых сообщений. Напомним также, что занести или получить текст в окно редактирования combobox можно с помощью функций Win32 API SetWindowText() и GetWindowText().

CB_GETDROPPEDSTATE

Получить состояние списка. Параметры сообщения: wParam=0; lParam=0;

Если возвращается ненулевое значение, то список видим на экране, если 0, то - невидим.

CB_SHOWDROPDOWN

Показать или скрыть список. Параметры сообщения: wParam=fShow; lParam=0;

Если fShow имеет ненулевое значение, список открывается, если fShow=0, список закрывается.

CB_GETCOUNT

Возвращает текущее количество строк в списке. Параметры сообщения: wParam=0; lParam=0;

CB_ADDSTRING

Добавляет строку szText в список. Если указан стиль CBS_SORT, то выполняется сортировка списка, если нет, то строка добавляется в конец списка. Параметры сообщения: wParam=0; lParam=(LPARAM)szText;

Возвращает позицию новой строки.

CB_INSERTSTRING

Вставляет строку szText в i-тую позицию, при этом сортировка не выполняется, даже если определен стиль CBS_SORT. Если i=-1, строка добавляется в конец списка. Параметры сообщения: wParam=i; lParam=(LPARAM)szText;

Возвращает позицию строки.

CB_DELETESTRING

Уничтожает i-тую строку в списке. Параметры сообщения:

wParam=i; lParam=0;

Возвращает количество оставшихся строк.

CB_FINDSTRING

Поиск контекста szFind в строках списка. Поиск начинается с i-той позиции списка. Параметры сообщения: wParam=i; lParam=(LPARAM)szFind;

Возвращает номер строки, включающей szFind, или СB_ERR, если контекст не найден.

CB_GETCURSEL

Возвращает номер выделенной пользователем строки. Если список не содержит выделенной строки, возвращается значение СB_ERR. Параметры сообщения: wParam=0; lParam=0;

СB_SETCURSEL

Пометить i-тую строку в списке как выделенную. Параметры сообщения: wParam=i; lParam=0;

CB_GETLBTEXTLEN

Возвращает длину текста в i-той строке списка. Параметры сообщения: wParam=i; lParam=0;

CB_GETLBTEXT

Копирует текст из i-той строки списка в буфер szBuff. Длина буфера должна быть достаточной, чтобы вместить копируемый текст (см. предыдущее сообщение). Параметры сообщения: wParam=i; lParam=(LPARAM)szBuff;