
- •Уп. 2. Органы управления в приложениях Win32
- •2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •2.2. Статический орган управления
- •2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •2.3.6. Пример обработки сообщений от полос прокрутки
- •2.3.7. Новые функции управления полосами прокрутки
- •2.3.8. Пример окна приложения с полосой просмотра
- •2.4. Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •2.4.4. Пример работы с однострочным редактором
- •2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •2.5.4. Пример работы со списком
- •2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •2.6.4. Пример работы с комбинированным списком
- •Контрольные вопросы
- •Упражнения
- •Приложение 2
2.6. Комбинированный список
2.6.1. Создание комбинированного списка
Этот орган является комбинацией однострочного редактора текста и списка и создается на базе класса "Combobox". Комбинированный список создается так же, как и другие органы управления:
hComboBox = CreateWindow("ComboBox", NULL,
WS_CHILD | WS.VISIBLE | WS_VSCROLL |
CBS_AUTOHSCROLL | CBS_SIMPLE,
30, 30, 200, 200, hwnd,
(HMENU) ID_COMBO, hInstance, NULL);
В стиле окон класса указывают символические имена с префиксом CBS_ (табл. 2.7).
2.6.2. Коды извещения
Комбинированный список посылает в функцию родительского окна сообщение WM_COMMAND. При этом младшее слово параметра wParam содержит идентификатор, а параметр lParam – дескриптор списка. Старшее слово параметра wParam содержит код извещения. Приведем список некоторых кодов извещений:
Код извещения |
Описание |
CBNCLOSEUP |
Список исчез (стал невидим) |
CBNDBLCLK |
Двойной щелчок левой клавишей мыши по строке списка стиля CBS_SIMPLE |
CBNDROPDOWN |
Список стал видимым |
CBNEDITCHANGE |
Пользователь изменил содержимое окна редактирования и изменения отображены |
CBNEDITUPDATE |
Пользователь изменил содержимое окна редактирования, изменения не отображены |
CBNERRSPACE |
Ошибка выделения дополнительной памяти |
CBNKILLFOCUS |
Список теряет фокус ввода |
CBNSELENDCANCEL |
Пользователь отменил выбор в списке |
CBNSELENDOK |
Пользователь выбрал строку в списке |
CBN_SELCHANGE |
Изменился номер выбранной строки |
CBNjSETFOCUS |
Список получает фокус ввода |
2.6.3. Сообщения для комбинированного списка
Для управления комбинированным списком используют набор сообщений, аналогичный сообщениям для списка и редактора текста. В следующей таблице перечислены коды некоторых сообщений:
Сообщение и параметры |
Пояснение |
CBADDSTRING, 0 и (LPARAM)lpszStr |
Добавить строку lpszStr в список. Возвращает номер строки в списке или код ошибки |
CBDELETESTRING (WPARAM)nIndex и 0L |
Удалить строку с номером nIndex из списка. Возвращает количество оставшихся в списке строк или код ошибки |
CBDIR, (WPARAM)(UINT)uAttr и (LPARAM) lpszFileSpec; |
Заполнить список именами файлов с атрибутом uAttr – и шаблона lpszFileSpec, и каталогов в текущем каталоге, и именами дисков. Возвращает номер последнего имени файла, добавленного в список, или код ошибки |
CBFINDSTRING, (WPARAM)nIndexStart и (LPARAM) (LPCSTR)lpszStr |
Начиная со строки с номером nIndexStart, искать строку с префиксом lpszStr. Возвращает номер найденной строки или код ошибки (если строки в списке нет) |
CBGETCOUNT, 0 и 0L |
Определить количество строк в списке. Возвращает количество строк в списке или код ошибки |
CBGETCURSEL, 0 и 0L |
Определить номер выделенной строки. Возвращает номер выделенной строки или код ошибки |
СВGETDROPPEDSTATE, 0 и 0L |
Определить, находится список в видимом или невидимом состоянии. Возвращает TRUE, если список виден, FALSE – если нет |
СВGETLBTEXT, (WPARAM)nIndex и (LPARAM)(int FAR *)lрВ |
Копировать текст строки с номером nIndex в буфер lрВ. Возвращает длину строки в байтах или код ошибки |
CBINSERTSTRING, (WPARAM)nIndex и (LPARAM)(int FAR *)lрВ |
Вставка строки lрВ в список под номером nIndex. Возвращает номер позиции, в которую вставлена строка, или код ошибки |
СВLIMITTEXT, (WPARAM)cCmax и 0L |
Определить cCmax как максимально допустимое количество символов в окне редактирования. Возвращаемое значение не используется |
СВRESETCONTENT, 0 и 0L |
Удалить все строки из списка. Возвращаемое значение не используется |
СВSELECTSTRING, (WPARAM)nIndexStart и (LPARAM)(int FAR *)lрВ |
Начиная со строки с номером nIndexStart, найти и выделить строку с префиксом lрВ. Возвращает номер найденной строки или код ошибки |
СВSETCURSEL, (WPARAM)nIndex и 0L |
Выделить строку с номером nIndex. Если nIndex равно -1, выделение всех строк будет отменено. При этом функция SendMessage вернет значение CB_ERR, что в данном случае не говорит об ошибке. Возвращает код ошибки (если значение nIndex не равно -1) |
СВSHOWDROPDOWN, (WPARAM)(BOOL)fExtended и 0L |
Переключение списка в отображаемое или неотображаемое состояние. При fExtended=TRUE отображать, при FALSE – нет. Возвращаемое значение всегда не равно 0 |