пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Комбинированные списки (класс CCombobox). Стили окон комбинированных списков. Сообщения от элемента управления типа «комбинированный список» (CBN) Некоторые методы класса CCombobox.

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

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

При создании списка “CCombobox” указываются специальные стили комбинированного списка, символические имена которых имеют префикс CBS_.

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

Среди всех стилей комбинированного списка можно выделить три базовых:

Рассмотрим стили Combo box, которые задаются при его создании в меню PROPERTIES

Style

When is list box visible?

Static or edit control?

Simple

Always

Edit

Drop-down

When dropped down

Edit

Drop-list

When dropped down

Static

По умолчанию предлагается Simple. В этом случае список постоянно отображен на экране. В поле ввода, располагающемся сверху, можно вводить любые данные. С помощью мыши можно выделять элемент в прикрепленном окне списка и он будет попадать в поле редактирования. Кроме того, если в поле редактирования набрать символы, совпадающие с начальными символами некоторых элементов списка, эти элементы станут первыми в списке.

Стиль Dropdown (раскрывающийся). В поле ввода (edit control), можно вводить любые данные, а щелкнув на стрелку – раскрыть окно списка и выбрать в нем любой элемент. Отмеченный элемент отображается в поле редактирования. Если в поле редактирования набрать символы, совпадающие с начальными символами некоторых элементов списка, эти элементы станут первыми в списке.

Стиль Droplist (раскрывающийся). В этом комбинированном списке пользователь сможет выбирать элементы только из раскрывающегося списка. Для этого он, щелкнув стрелку, укажет нужную строку или введет первую букву из выделенной строки.

Combo box можно инициализировать в окне Properties. На вкладке Data есть окно Enter Listbox Items. Каждую строку в нем следует заканчивать Ctrl+Enter.

List box можно инициализировать только когда начинается диалог, в функции OnInitDialog, которая увязана с сообщением WM_INITDIALOG, класса CSDIDialog.

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

Коды извещения для комбинированного списка имеют символические имена с префиксом CBN_.

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

Для управления списком “combobox” используется набор сообщений, аналогичный набору сообщений для списка “CListbox” и редактора текста “CEdit”.

В файле windows.h определены сообщения, специально предназначенные для работы со списком “combobox”. Символические имена этих сообщений имеют префикс CB_.

Многие методы Combo box и List box совпадают. В Combo box нет методов, связанных с множественным выбором.

Дополнительные методы, связанные с полем редактирования.

DWORD GetEditSel( ) const;

Получает начальную и конечную позиции в текущей отметке строки в поле редактирования.

Возвращает двойное слово. Начальная позиция (номер символа) содержится в младшем (low-order) слове, конечная позиция (первый невыделенный символ) - в старшем (high-order) слове. Если Combo box используется без поля редактирования, выдается CB_ERR.

Пример:

DWORD dwCurSel = m_combobox.GetEditSel();

WORD dStart = LOWORD(dwCurSel);

WORD dEnd   = HIWORD(dwCurSel);

BOOL SetEditSel( int nStartChar, int nEndChar );

Отмечает символы в поле редактирования. Чтобы выбрать первую позицию, вы должны указать начальную позицию (nStartChar) 0. Чтобы отметить до четвертой позиции включительно, вы должны указать номер первой позиции, следующей за отмеченной nEndChar=4.

nStartChar – означает начальную позицию отметки (счет с нуля). Если она равна –1, удалить существующую отметку.

nEndChar – означает конечную позицию (номер первого символа за отмеченным). Если она равна –1, Помечается весь текст.

Возвращает CB_ERR, если ComboBox имеет стиль DROPDOWNLIST.

Пример:

if (dwCurSel != CB_ERR)

          m_combobox.SetEditSel(dStart, dEnd);

CWnd::GetWindowText

int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

void GetWindowText( CString& rString ) const;

Копирует заголовок окна в буфер (lpszStringBuf) или строку (rString). Если окно является control (в нашем случае полем редактирования), копирует текст из поля редактирования.

Возвращает длину строки в байтах, не включая символ конца. Возвращает 0, если нет текста.

nMaxCount означает максимальное количество символов, которое может быть скопировано в буфер. Если строка длиннее, она обрезается.

 CString str;

 GetWindowText(str);

 int nLength = str.GetLength();

void SetWindowText( LPCTSTR lpszString );

Копирует строку (lpszString) в заголовок окна. Если окно является control (в нашем случае полем редактирования), копирует строку в поле редактирования.

lpszString – указатель на строку.

SetWindowText(str);

int GetLBText( int nIndex, LPTSTR lpszText ) const;

void GetLBText( int nIndex, CString& rString ) const;

Получает строку из Listbox.

nIndex означает индекс строки, если индекс меньше нуля, или больше предельного значения возвращается CB_ERR.

lpszText означает указатель на буфер, который должен получить строку. Буфер должен иметь достаточно места и иметь символ конца строки. Размер строки должен быть определен заранее с помощью метода GetTextLen.

rString - Ссылка на объект класса CString.

Возвращает длину строки в байтах включая символ конца строки. Возвращает ошибку LB_ERR, если возникает ошибка в индексе.

int SetItemData( int nIndex, DWORD dwItemData );

устанавливает 32-разрядное значение связанное с выбранным элементом

nIndex означает индекс элемента, который должен быть установлен,

dwItemData означает новое значение элемента.

DWORD GetItemData( int nIndex ) const;

Извлекает 32-разрядное значение связанное с выбранным элементом nIndex означает индекс элемента в списке.

Список может получать:

ON_WM_CHARTOITEM - Обработчик сообщения для списков не имеющих строковых элементов получает сообщение WM_CHAR.

ON_WM_VKEYTOITEM - Уведомление о нажатии кнопки

VK_SHIFT, VK_CONTROL, VK_ ALT и т.д.

VK_DOWN)

VK_UP, VK_RIGHT, VK_LEFT, VK_ESCAPE, VK_RETURN,

VK_SPACE VK_DELETE ,  VK_BACK


18.01.2020; 19:55
хиты: 50
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь