
- •Уп. 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.5. Списки строк
2.5.1. Создание списка
Списки строк создают на базе класса "listbox". Строки в списке нумерует операционная система, и номер первой строки равен 0. Списки могут быть одноколоночные и многоколоночные, с вертикальной (для одноколоночных списков) и горизонтальной (для многоколоночных списков) полосой просмотра. При создании списка первым аргументом функции CreateWindow является указатель на строку "listbox", а третий аргумент задают с помощью табл. 2.6. Например:
#define ID_LIST 111
hListBox = CreateWindow("listbox", NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD |
LBS_WANTKEYBOARDINPUT,
30, 30, 200, 100, hwnd, (HMENU)ID_LIST, hInst, NULL);
Второй аргумент функции должен быть указан как NULL. Дополнительно к стилям окна WS_CHILD и WS_VISIBLE указывают стили списка, имена которых имеют префикс LBS_.
2.5.2. Сообщения от списка
Список со стилем LBS_NOTIFY посылает в функцию родительского окна сообщение WM_COMMAND. При этом младшее слово параметра wParam равно идентификатору списка. Параметр lParam содержит дескриптор списка. Старшее слово параметра wParam содержит один из следующих кодов извещения:
Код извещения |
Описание |
LBN_DBLCLK |
Двойной щелчок левой клавишей мыши по строке списка |
LBN_ERRSPACE |
Ошибка при попытке заказать дополнительную память |
LBN_KILLFOCUS |
Список потерял фокус ввода |
LBN_SELCANCEL |
Пользователь отменил выбор в списке |
LBN_SELCHANGE |
Изменился номер выбранной строки |
LBN_SETFOCUS |
Список получил фокус ввода |
2.5.3. Сообщения для списка
Приложение может посылать списку сообщения, вызывая функцию SendMessage. Символические имена этих сообщений имеют префикс LB_. Коды некоторых сообщений перечислены в следующей таблице:
Код сообщения и значения wParam и lParam |
Пояснение |
LB_ADDSTRING, 0, (LPARAM)lpszStr |
Добавить в список строку lpszStr. Возвращает номер строки в списке |
LB_DELETESTRING, (WPARAM)nIndex и 0L |
Удалить строку с номером nIndex из списка. Возвращает количество оставшихся в списке строк |
LB_DIR, (WPARAM)(UINT)uAttr и (LPARAM)lpszFileSpec |
Заполнить список именами дисков, каталогов и файлов атрибутов uAttr по шаблону lpszFileSpec из текущего каталога. Возвращает номер последнего добавленного в список имени файла |
LB_FINDSTRING, (WPARAM)nStart и (LPARAM)lpszStr |
Начиная от строки с номером nStart, искать строку с префиксом lpszStr. Возвращает номер найденной строки или код ошибки |
LB_FINDSTRINGEXACT, (WPARAM)nStart и (LPARAM)lpszStr |
Начиная от строки с номером nStart, искать строку lpszStr. Возвращает номер найденной строки или код ошибки |
LB_GETCARETINDEX, 0 и 0L |
Определение номера строки, имеющей фокус ввода. Возвращает номер этой строки или код ошибки |
LB_GETCOUNT, 0 и 0L |
Определение количества строк в списке. Возвращает количество строк в списке или код ошибки |
LB_GETCURSEL, 0 и 0L |
Определение номера выделенной строки. Возвращает номер выделенной строки или код ошибки |
LB_GETSEL, (WPARAM)nIndex и 0L |
Определить, выбрана ли строка с номером nIndex. Возвращает положительное число, если строка выбрана, и 0, если не выбрана или код ошибки |
LB_GETSELCOUNT, 0 и 0L |
Определить количество выбранных строк. Возвращает количество выбранных строк или код ошибки |
LB_GETSELITEMS, (WPARAM)cI и (LPARAM)(int FAR *)lpI |
Заполнить буфер lpI размера cI номерами выбранных строк. Возвращает количество записанных в буфер номеров или код ошибки |
LB_GETTEXT, (WPARAM)nIndex и (LPARAM)(int FAR *)lpB |
Копировать текст строки с номером nIndex в буфер lрВ. Возвращает длину строки или код ошибки |
LB_GETTEXTLEN, (WPARAM)nIndex и 0L |
Определить длину строки с номером nIndex. Возвращает длину строки или код ошибки |
LB_GETTPOINDEX, 0 и 0L |
Определить номер первой отображаемой строки. Возвращает номер строки или код ошибки |
LB_INSERTSTRING, (WPARAM)nIndex и (LPARAM)(int FAR *)lpB |
Вставить элемент lрВ в список под номером nIndex. Возвращает номер, под которым вставлена строка, или код ошибки |
LB_RESETCONTENT, 0 и 0L |
Удалить все строки из списка. Возвращаемое значение: не используется |
LB_SELECTSTRING, (WPARAM)nIndexStart и (LPARAM)(int FAR *)lpB |
Начиная с позиции nIndexStart, найти и выделить строку с префиксом lрВ. Возвращает номер найденной строки или код ошибки |
LB_SELITEMRANGE (WPARAM)(BOOL)fSelect; MAKELPARAM(wF, wL) |
Выделить (fSelect=TRUE) или отменить выделение (fSelect= FALSE) строк с номерами от wF до wL. Возвращает код ошибки |
LB_SETCARETINDEX, (WPARAM)nIndex и MAKELPARAM(fS, 0) |
Передать фокус ввода строке с номером nlndex. Если fS=TRUE, свертка выполняется до тех пор, пока указанная строка не будет видна хотя бы частично, если FALSE – до тех пор, пока строка не будет видна полностью. Возвращает код ошибки |
LB_SETCURSEL, (WPARAM)nIndex и 0L |
Отменить предыдущий выбор и выбрать строку с номером nIndex. Если nIndex равно -1 отменяется выделение всех строк, возвращается значение LB_ERR, что в данном случае не говорит об ошибке. Иначе (nIndex не равно -1) возвращает код ошибки |
LB_SETTOPINDEX, (WPARAM)nIndex и 0L |
Свертка списка до тех пор, пока строка с номером nIndex не станет видимой. Возвращает код ошибки |