logo
Конспект по ООПиП ч

16. Комбинированные списки (класс cCombobox).

Этот класс является комбинацией списка и однострочного редактора, поэтому для комб-го списка исп-ся стили, коды извещения и сообщения, анал-ые списку CListbox, а также некот-е сообщения, спец-кие для редактора текста класса CEdit. При создании списка CCombobox указ-ся спец-ные стили комб-го списка, символические имена которых имеют префикс CBS_.

Рассмотрим базовые стили комбинированного списка.

Среди всех стилей комбин.списка можно выделить три базовых, которые задаются при его создании в меню PROPERTIES.

Style

When is list box visible?

Static or edit control?

Simple

Always

Edit

Drop-down

When dropped down

Edit

Drop-down list

When dropped down

Static

По умолчанию предлагается Simple. В этом случае список постоянно отображен на экране. В поле ввода, распол-ся сверху, можно вводить любые данные. С помощью мыши можно выделять элемент в прикрепленном окне списка, и он будет попадать в поле ред-ния. Кроме того, если в поле ред-ния набрать символы, совп-щие с нач-ми символами некот-ых эл-тов списка, эти эл-ты станут первыми в списке. Стиль Dropdown (раскрыв-ся). В поле ввода (edit control), м.вводить любые данные, а, щелкнув на стрелку, – раскрыть окно списка и выбрать в нем любой элемент. Отмеченный элемент отображается в поле ред-ния. Если в поле ред-ния набрать символы, совпадающие с начальными символами некоторых эл-тов списка, эти эл-ты станут первыми в списке. Стиль Droplist. В этом комб-ном списке пользователь сможет выбирать элементы только из раскрыв-ся списка. Для этого он, щелкнув стрелку, укажет нужную строку или введет первую букву из выделенной строки. Combobox можно иниц-ть в окне Properties. На вкладке Data есть окно Enter Listbox Items. Каждую строку в нем следует заканчивать Ctrl+Enter. Listbox можно иниц-ть только когда начинается диалог, в функции OnInitDialog, которая увязана с сообщением WM_INITDIALOG, класса CSDIDialog. Сообщения от комб-го списка, посылаемые род-му окну. Коды извещения для комб-ого списка имеют симв-кие имена с префиксом CBN_. Рассмотрим сообщения, посылаемые родит-ским окном, комб-ным спискам. Для упр-ния списком combobox исп-ся набор сообщений, аналогичный набору сообщений для списка CListbox и редактора текста CEdit. В файле windows.h определены сообщения, специально предназначенные для работы со списком combobox. Символические имена этих сообщений имеют префикс CB_. Сообщения: CBN_ERRSPACE - превышен размер памяти, отведенный для списка. CBN_SELCHANGE - изменен текущий выбор (подсветка перемещается по списку); CBN_DBLCLK - на пункте списка имел место двойной щелчок мышью. Окно списка посылает коды уведомления CBN_SELCHANGE и CBN_DBLCLK только в том случае, если в стиль дочернего окна включен идентификатор CBN_NOTIFY. CBN_KILLFOCUS - Потеря фокуса. CBN_SELCANCEL - Выбор с элемента снимается. CBN_SETFOCUS - Получение фокуса. Многие методы Combobox и Listbox совпадают. В Combobox нет методов, связанных с множественным выбором. 1. Метод для очистки содержимое списка, делает его пустым: void ResetContent();

2. Метод для добавления элемента в список: int AddString( LPCSTR lpszItem); Добавляет строку lpszItem в список и сортирует его, если при создании включено свойство Sort. В противном случае элемент добавляется в конец списка.

3. Метод для удаления элемента из списка: int DeleteString( UINT nIndex); Удаляет из списка элемент с индексом nIndex. Индексация элементов начинается с 0.

4. Метод для получения индекса элемента, выбранного пользователем: int GetCurSel() const;

5. Метод для программной установки отмеченного элемента списка: int SetCurSel( int nSelect); Отмечает элемент с индексом nSelect как выбранный элемент списка. Если значение параметра равно -1, список не будет содержать отмеченных элементов.

6. Методы для копирования содержания определенного элемента в буфер: int GetText( int nIndex, LPSTR lpszBuffer) const;

или void GetText( int nIndex, CString& rString) const;

Копирует элемент с индексом nIndex в буфер.

7. Метод для организации прокрутки списка в окне так, чтобы элемент с индексом nIndex был видимым:

int SetTopIndex( int nIndex);

8. Метод для организации поиска в списке:

int FindString( int nStartAfter, LPCSTR lpszItem) const;