Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП02_Органы управления.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
576 Кб
Скачать

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 не станет видимой. Возвращает код ошибки