Учебное пособие: Работа с окнами приложений
LB_FINDSTRING nIndexStart lpszString
найти нужную строку в списке и получить ее индекс
LB_DELETESTRING nIndex 0L
удалить строку из списка
LB_GETTEXT nIndex lpsBuffer
прочитать строку с индексом nIndex в списке и разместить ее в указаном буфере.
LB_GETCURSEL 0 0
получить индекс текущего выбранного элемента
LB_DIR nAttr lpszMask
заполнить список именами файлов, директорий и дисков. Иногда удобно пользоваться специальной функцией, посылаеющей это сообщение: DlgDirList и DlgDirSelect.
Посылаемые родительскому окну коды извещения могут информировать его о следующих событиях списка:
LBN_ERRSPACE – о произошедшей ошибке, связанной с нехваткой памяти;
LBN_KILLFOCUS и LBN_SETFOCUS – о получении или потере фокуса ввода;
LBN_DBLCLK – о двойном нажатии на кнопку мыши;
LBN_SELCHANGE – об изменении текущего выбранного элемента;
LBN_SELCANCEL – процесс выбора прерван, например, переходом к другому окну.
Существует еще одна разновидность списков - так называемые комбинированные списки, состоящие из небольшого окошка редактора и простого списка, размещенного под ним. Эти списки принадлежат к классу COMBOBOX. Выделяют три разновидности комбинированных списков, определяемых его стилем:
· простой комбинированный список – CBS_SIMPLE – когда и редактор и список постоянно видны;
· выпадающий комбинированный список – CBS_DROPDOWN – когда постоянно видимо окошко редактора и специальная кнопка справа, при нажатии на которую под редактором появляется (выпадает) список.
· неизменяемый комбинированный список – CBS_DROPDOWNLIST – аналогичный CBS_DROPDOWN, но текст в редакторе не может быть изменен.
Комбинированные списки позволяют легко получать пополняемый во время работы список, но автоматическое пополнение не предусмотрено. Для этого Вам надо будет самим, убедившись, что текст в редакторе не присутствует в списке, добавить его к списку.
Такой список может иметь стиль CBS_OEMCONVERT, который приводит к автоматическому преобразованию записываемых в него строк из OEM в ANSI, и к обратному преобразованию при чтении из него данных.
Комбинированные списки поддерживают еще больше сообщений и кодов извещения, связанных с применением редактора и возможностью появления и скрывания списка.
Редактор
Один из самых удобных стандартных классов - класс редактора EDIT. Окна, принадлежащие к этому классу могут представлять собой как однострочные, так и многострочные редакторы, возможно имеющие полосы прокрутки и даже окошки просмотра - ввод и редактирование в которых запрещены. К таким редакторам легко добавлять дополнительные операции, например, поиск или замену текста. Самым существенным недостатком является то, что весь редактируемый текст размещается в локальном блоке памяти, и, соответственно, ограничен размером этой памяти - не более 64K минус уже занятое пространство.
Весь редактируемый текст представляет собой одну длинную, заканчивающуюся \0 строку, возможно содержащую символы табуляции, перевода строки и возврата каретки.
Простейший способ создать собственный редактор - при создании собственного окна на всю его внутреннюю область установить окно стандартного редактора и добавить несколько дополнительных функций - меню, чтение/запись файла, поиск/замену и пр. Строго говоря, текстовой редактор NotePad сделан именно таким методом.
Окошко редактора может быть использовано для редактирования небольшого текста, тогда для его чтения или задания удобно использовать функции
void SetWindowText( hWnd, lpszText );
int GetWindowText( hWnd, lpsBuffer, nMaxCount );