Главная » Win32 API » Список строк List Box

0

Элемент управления «список строк» создается на основе предопре­деленного класса «listbox», отвечающего за формирование окна, в кли­ентской области которого отображается список, из которого можно осуществлять выбор одного или нескольких элементов. Если размеры окна для списка не позволяют вместить все строки, то создается поло­са прокрутки. В списке можно выбрать либо один элемент, либо не­сколько. Элементы списка могут быть удалены или добавлены.

При создании списка строк стиль указывается с помощью комби­нации констант, описывающих стили окон с префиксами WS_ (WSCHILD и WSVISIBLE) и стили списков с префиксами LBS_:

•            LBSSTANDARD строки в элементе управления класса LISTBOX сортируются в алфавитном порядке, когда пользователь де­лает обычный или двойной щелчок на строке, родительскому окну по­сылается сообщение. Элемент управления класса LISTBOX обладает вертикальной полосой прокрутки и рамками;

•            LBSEXTENDEDSEL допускается выбор нескольких эле­ментов списка при помощи клавиши <Shift> и мыши или при помощи специальных клавиш;

•            LBSHASSTRINGS используется для обслуживания памяти и указателей на строки, появляющихся в нестандартном списке. Стиль LBSHASSTRINGS позволяет приложению использовать сообщение для списка LBGETTEXT, чтобы получить конкретную строку;

•            LBSMULTICOLUMN используется для списка из несколь­ких колонок, между которыми возможна горизонтальная прокрутка;

•            LBSMUPLTIPLESEL допускается выбор произвольного ко­личества строк, выбранная строка меняется всякий раз, когда пользо­ватель делает обычный или двойной щелчок на строке;

LBSNOTIFY если пользователь сделает обычный или двой­ной щелчок на строке списка этого стиля, то родительское окно получит сообщение;

•            LBSOWNERDRAWFLXEDза перерисовку содержимого списка этого стиля отвечает окно-владелец, все элементы списка име­ют одинаковую высоту;

•            LBSOWNERDRAWVARIABLE за перерисовку содержимо­го списка этого стиля отвечает окно-владелец; в отличие от стиля LBSOWNERDRAWFIXED, элементы списка могут быть разной вы­соты.

•            LBSSORTстроки в элементе управления класса LISTBOX сортируются в алфавитном порядке;

•            LBSUSETABSTOPS распознаются и отображаются все сим­волы табуляции при выводе строк;

•            LBSWANTKEYBOARDINPUT если пользователь нажимает клавишу и список этого стиля обладает фокусом ввода, то владелец списка         получает            сообщения           WMVKEYTOITEM                                   и WMCHARTOITEM.

Если стиль списка допускает посылку сообщения WMCOMMAND родительскому окну, то младшее слово параметра wParam содержит идентификатор списка, старшее код события со списком. Параметр IParam содержит дескриптор списка. Примеры кодов событий с эле­ментом ListBox: LBNDBLCLK двойной щелчок левой кнопкой мы­ши по строке списка; LBNSETFOCUS/LBNKILLFOCUS получе­ние/потеря фокуса ввода; LBNSELCANCEL отмена выбора в спи­ске; LBNSELCHANGE изменился выбор в списке.

Сообщения, посылаемые списку строк, имеют префикс LB_. Часто употребляемые сообщения приведены в таблице 3.2. Отметим, что элементы списка номеруются с нуля.

Таблица 3.2 Сообщения для List Box

Код сообщения

Значение wParam

Значение IParam

Назначение

LBADDSTRING

0

szStr

Добавление в список строки szStr. Если сор­тировка выключена то в конец

LB DELETESTRING

i

0

Удаление i-той строки

LBGETCOUNT

0

0

Подсчет количества элементов в списке

LBGETTEXT

i

szStr

Копирование строки с номером i в szStr

Продолжение таблицы 3.2.

Код сообщения

Значе­ние wParam

Значение lParam

Назначение

LBGETSELITEMS

п

адрес буфе­ра Buf

Запись в буфер Buf ин­дексы выделенных эле­ментов (не более п!) из списка со множествен­ным выбором

LBFINDSTRING

i

szStr

Поиск    строки,    начи­нающейся с szStr в спи­ске, начиная с i+1 эле­мента.   Если   i=-l,TO   с начала списка. SendMessage возвращает номер      строки      или LB ERR при неудаче

LBINSERTSTRING

i

szStr

Вставка    строки    szStr после строки с номером i. Используется для не­сортированного списка.

LB RESETCONTENT

0

0

Очистка списка

LBSELECTSTRING

i

szStr

Поиск  аналогично   об­работке

LBFINDSTRING и вы­деление         найденной строки

LBSETCURSEL

i

0

Выбор строки с номе­ром i для списка с еди­ничным выбором

LBSETSEL

TRUE/ FALSE

i

Выбор элемента с но­мером   i   в   списке   со множественным   выбо­ром. Если i=-l, то вы­бираются все элементы списка.      Если      wPa-ram=TRUE, то выбран­ные элементы выделя­ются, FALSE выбор отменяется.

Продолжение таблицы 3.2.

LBGETCURSEL

0

0

Для списка с единст­венным выбором воз­вращает номер выбран­ного элемента или LB ERR

LBGETSELCOUNT

0

0

Для списка со множест­венным выбором воз­вращает количество выбранных элементов

Например, пусть требуется добавить в несортированный список строк строку si:

invoke SendMessage,hEditBox!,LB_ADDSTRING,0,ADDR sl

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

По теме:

  • Комментарии