Рассмотрим сообщения, которые могут посылать родительские окна окнам списков для их заполнения и дальнейшей работы с ними



После создания окна списка в него следует добавить строки текста – элементы списка. Это делается при помощи функции SendMessage посредством отправки сообщений окну списка. Ссылка на строку текста (на элемент) обычно осуществляется через индекс, который начинается с 0, что соответствует самому верхнему элементу списка.

Специфических сообщений, которые родительское окно может послать окну списка при помощи функции SendMessage, достаточно много. Рассмотрим наиболее часто употребляемые:

  • LB_ADDSTRING - для добавления строки в конец списка или по алфавитному порядку (последнее - если используется стиль LBS_SORT);
  • LB_INSERTSTRING - для вставки строки на определенное порядковое место в списке (если не используется стиль LBS_SORT);
  • LB_DELETESTRING - для удаления строки с некоторым порядковым номером;
  • LB_RESETCONTENT - для полного очищения списка;
  • LB_GETCOUNT - для определения общего количества пунтов списка;
  • LB_GETTEXTLENGTH - для определения длины любого пункта списка;
  • LB_SETCURSEL - для установки элемента, выбираемого по умолчания (для списков с единичной выборкой);
  • LB_SELECTSTRING - для выборки (установки) элемента списка на основе его первых символов (для списков с единичной выборкой);
  • LB_GETCURSEL - для определения индекса элемента, выбранного в текущий момент (для списков с единичной выборкой);
  • LB_SETSEL - для установки состояния выбора конкретного элемента, при этом не оказывая влияния на другие элементы, которые могли бы быть выбранными(для списков с множественным выбором);
  • LB_GETSEL - для определения, выбран ли конкретный элемент списка или нет.

Самым мощным сообщение для окон списка является сообщение LB_DIR. Следующий оператор заполняет список перечнем файлов каталога, иногда с подкаталогами и именами доступных дисков:

     SendMessage(hWndList,LB_DIR, iAttr,(LPARAM)szFileSpec);

  • Параметр iAttr это код атрибута файла, он определяет атрибуты отображаемых в списке файлов.
  • Параметр szFileSpec – это указатель на строку, задающую спецификацию файлов. Такая спецификация не влияет на подкаталоги, которые содержатся в списке.

Рассмотрим, какие значения, объединенные порязрядным ИЛИ, можно использовать для задания атрибутов файлов:

  • В качестве младшего байта используется обычный атрибут файла: DDL_READWRITE – обычный файл; DDL_READONLY – файл только для чтения, DDL_HIDDEN – скрытый файл; DDL_SYSTEM – системный файл; DDL_DIRECTORY – подкаталог; DDL_ARCHIVE – файл с установленным архивным битом.
  • Старший байт обеспечивает некоторый дополнительный контроль над выводимыми именами: DDL_DRIVES – включение имен дисков; DDL_EXCLUSIVE – включать только файлы с указаными атрибутам.

Вот как будет, например, выглядеть вызов, выводящий в список имена всех файлов текущего каталога, имена всех подкаталогов этого каталога (в виде [subdir]) и имена всех доступных дисков (в виде [-A-]):

     SendMessage(hWndList,LB_DIR,

               DDL_READWRITE|DDL_READONLY|DDL_HIDDEN|

               DDL_SYSTEM|DDL_DIRECTORY|DDL_DRIVES|DDL_ARCHIVE,

               (LPARAM)"*.*");

  • Если для списка не используется стиль LBS_SORT, то имена файлов и каталогов выводятся вперемешку, а имена доступных дисков оказываются в конце списка.

Замечание. Когда пользователь щелкает мышью над окном списка, окно списка получает фокус ввода. Если окно списка имеет фокус ввода, то для выбора пунктов можно пользоваться как мышью, так и клавиатурой.

Рассмотрим сообщения, которые могут посылать списки родительским окнам

Окно списка посылает родительскому окну сообщения WM_COMMAND, в старшем слове параметра wParam этого сообщения содержится код уведомления:

  • LBN_ERRSPACE - превышен размер памяти, отведенный для списка
  • LBN_SELCHANGE - изменен текущий выбор (подсветка перемещается по списку);
  • LBN_DBLCLK - на пункте списка имел место двойной щелчок мышью.

Замечание. Окно списка посылает коды уведомления LBN_SELCHANGE и LBN_DBLCLK только в том случае, если в стиль дочернего окна включен идентификатор LBS_NOTIFY.

Для обработки сообщения от списка оконная функция родительского окна может содержать код следующего вида:

     case WM_COMMAND:

     {    UINT idCtl=LOWORD(wParam); // идентификатор дочер. окна

               UINT code=HIWORD(wParam); // код уведомления

               HWND hChild=(HWND)lParam; // дескриптор дочер. окна

               If(idCtrl==ID_listbox&&code==LB_SELCHANGE)

               {

                          // текущий выбор в списке изменился

                          . . .

               }

     }; return 0;

 


Дата добавления: 2019-09-13; просмотров: 188; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!