Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Использование элемента управления типа «список». Стили окон списков. Сообщения от элемента управления типа «список» (LBN_). Некоторые методы класса CListBox.




Использование элемента управления типа список

Работать со списками сложнее, поскольку реальным объектом список становится тогда, когда диалоговое окно уже выведено на экран. Нельзя вызывать функции-члены списка до тех пор, пока не будет порожден экземпляр класса диалогового окна. Таким образом, инициализировать список – заполнить его элементами-строками – и анализировать, какая строка выбрана, можно только на том участке программы, который выполняется во время присутствия диалогового окна на экране.

Когда наступает время инициализировать диалоговое окно, перед выводом его на экран, вызывается функция-член класса CDialog OnInitDialog(). Для того, чтобы включить эту функцию в члены класса CsdiDialog необходимо воспользоваться услугами ClassWizard.

В окне ClassView щелкнуть правой кнопкой на CsdiDialog и в контекстном меню выбрать команду Add Windows Message Handler (Добавить обработчик сообщений Windows). На экране появится окно New Message and Event Handlers. В списке New Windows Messages/Events выбрать WM_INITDIALOG и щелкнуть на кнопке Add Handler. Идентификатор сообщений исчезнет из списка в левой части окна и появится в списке Existing Messages/Event Handlers в правой части. Щелкнуть на нем и затем щелкнуть на кнопке EditExisting с тем, чтобы увидеть текст программы.

BOOL CsdiDialog:: OnInitDialog()

{  CDialog::OnInitDialog();

m_listbox.AddString(“First String”);

m_listbox.AddString(“Second String”);

m_listbox.AddString(“Third String”);

m_listbox.AddString(“Fourth String”);

m_listbox.SetCurSel(2);

m_radio=1;

UpdateData(FALSE);

return TRUE; //Возвращает TRUE , если только вы не //установили фокус ввода на элемент //управления

Работы этого фрагмента начинается с вызова той версии функции OnInitDialog(), которая принадлежит базовому классу СDialog. Она выполнит все фоновые операции, предусмотренные в MFC, для инициализации диалогового окна. Затем вызывается функция член AddString, которая добавляет в список элементы. Функция SetCurSelустанавливает начальный фокус выбора в списке. Индекс начинается с нуля.

Для того чтобы организовать вывод в окне сообщения информации о выбранном из списка элементе, нужно также включить специальный член-переменную в класс диалогового окна. В эту переменную при закрытии окна будет записываться значение, к которому затем можно обратиться, несмотря на то, что окно уже закрыто. В окне ClassView правой кнопкой на CsdiDialog и выбрать Add Member Variable. Заполните реквизиты: имя – m_selected; тип – Cstring и щелкните OK. Описание переменной появится в файле заголовка класса диалогового окна. Если планируется, что список должен поддерживать многозначный выбор, то тип введенной переменной будет CstringArray, т.е. эта переменная будет содержать массив выбранных переменных. Член- переменную вообще говоря следует объявлять закрытой (private), а функции доступа к ней открытыми (public). В примере для упрощения объявим public. Эта новая переменная будет хранить выбранный пользователем элемент списка. Запись в нее будет производиться тогда, когда пользователь щелкает на OK или CANCEL.

Для того, чтобы добавить функцию, которая будет вызываться после щелчка OK, нужно выполнить следующее.

1. В окне ClassView щелкнуть правой кнопкой на CsdiDialog и в контекстном меню выбрать команду Add Windows Message Handler (Добавить обработчик сообщений Windows).

2. В окне New Message and Event Handlers выбрать в списке Class or object to handle IDOK.

3. В левом списке New Windows Messages/Events выбрать BN_CLICKED. Этим вы выбираете функцию для обработки однократного щелчка на кнопке OK.

4. щелкнуть на кнопке Add Handler, появится диалоговое окно Add Member Function.

5. Согласитесь с предложенным именем OnOK(), для чего щелкните на OK.

6. Щелкните на кнопке EditExisting, появится текст программы. Вставьте в него несколько строк.

Стили окон списков

В окна списка почти всегда включают идентификатор стиля LBS_NOTIFY, что позволяет родительскому окну получать от окна спискасообщение WM_COMMAND.

Если приложение желает иметь возможность сортировать элементы списка, ему необходимо использовать в окне списке и другой часто используемый идентификатор стиля – LBS_SORT.

По умолчанию, в списке допускается выбор только одного пункта. Если необходимо создать список с возможностью выборки сразу нескольких пунктов, то следует использовать стиль LBS_MULTIPLESEL.

По умолчанию, оконная процедура окна списка выводит только список элементов без какой-либо рамки вокруг. Рамку можно добавить с помощью стиля WS_BORDER.

Для прокрутки содержимого с помощью мыши и вертикальной полосы прокрутки следует использовать стиль WS_VSCROLL.

В заголовочных файлах Windows определяется стиль списка, который называется LBS_STANDARD.Стиль LBS_STANDARDвключает в себя наиболее часто используемые стили списка. Он определяется как комбинация

(LBS_NOTIFY|LBS_SORT|WS_VSCROLL|WS_BORDER)

Замечание.Также можно пользоваться стилями WS_SIZEBOX и WS_CAPTION, которые дают возможность менять размер окна и перемещать его по рабочей области родительского окна.

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

Когда Вы работаете со списком, вырабатываются уведомляющие сообщения (notification) от списка. Вы можете посмотреть все сообщения, которые можете обрабатывать в Message Map, если выберите IDC_list1 списка.

LBN_ERRSPACE - превышен размер памяти, отведенный для списка

LBN_SELCHANGE- изменен текущий выбор (подсветка перемещается по списку);

LBN_DBLCLK- на пункте списка имел место двойной щелчок мышью.

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

LBN_KILLFOCUS - Потеря фокуса

LBN_SELCANCEL - Выбор с элемента снимается

LBN_SETFOCUS - Получение фокуса










Последнее изменение этой страницы: 2018-04-12; просмотров: 235.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...