Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Кнопки с независимой фиксациейСодержание книги
Поиск на нашем сайте
Эти кнопки (флажки) создаются со стилем BS_CHECKBOX, BS_AUTOCHECKBOX, BS_3STATE или BS_AUTO3STATE. Кнопки стилей BS_CHECKBOX и BS_AUTOCHECKBOX имеют два состояния: флажок установлен или нет. Состояния кнопки изменяется функцией CButton::SetCheck:
Для проверки текущего состояния кнопки служит функция CButton::GetCheck. Возвращаемое значение равно BST_CHECKED или BST_UNCHECKED. Как и нажимаемые кнопки, флажки при нажатии посылают родительским окнами уведомления BN_CLICKED. Кнопки со стилем BS_AUTOCHECKBOX изменяют состояния при щелчке мышью автоматически, а со стилем BS_CHECKBOX – нет. Поэтому для кнопок со стилем BS_CHECKBOX требуется обработчик BN_CLICKED, который будет управлять состоянием кнопки, например:
Кнопки со стилем BS_3STATE или BS_AUTO3STATE имеют не два, а три состояние. Добавочное состояние – "неопределенное", обозначается константой BST_INDETERMINATE:
Кнопка в неопределенном состоянии выглядит как флажок на сером фоне. Это может обозначать в программе, что что-то "включено не полностью" или "выключено не полностью". Например, в текстовом редакторе неопределенное состояние флажка "полужирный шрифт" может означать, что в выделенном фрагменте текста есть как обычный, так и полужирный шрифт.
Кнопки с зависимой фиксацией Кнопки с зависимой фиксацией (радиокнопки) имеют стиль BS_RADIOBUTTON или BS_AUTORADIOBUTTON. Обычно они используются в виде групп кнопок, когда каждая кнопка обозначает один из нескольких взаимно исключающих параметров. При нажатии кнопка BS_AUTORADIOBUTTON включает свою пометку, и отключает пометку у другой кнопки в группе. При использовании кнопки со стилем BS_RADIOBUTTON включать/выключать пометку придется программно с помощью CButton::SetCheck. Радиокнопки, как и другие кнопки, посылают уведомления BN_CLICKED. Для кнопок со стилем BS_AUTORADIOBUTTON обработка этих уведомлений необязательна, они автоматически меняют свое состояние.
Групповые блоки Групповой блок – это ЭУ "кнопка" со стилем BS_GROUPBOX. В отличие от кнопок других типов, групповой блок никогда не получает фокуса ввода и не посылает уведомлений родительскому окну. Его единственная функция – визуально отделять группы ЭУ друг от друга. Заключив группу ЭУ внутрь группового блока, можно ясно показать пользователю, что эти ЭУ имеют некоторое общее назначение. На логическое группирование ЭУ блоки не влияют, поэтому недостаточно просто поместить набор ЭУ внутрь блока, надо обеспечить и соответствующую программную обработку для них.
1.2 Списки: класс CListBox Элемент "список" предназначен для отображения списка текстовых строк, называемых элементами списка. У списка есть возможности сортировки элементов и прокрутки, если они не помещаются в области списка на экране. Списки полезны для представления пользователю информации и для выбора одного или нескольких элементов из них. При щелчке или двойном щелчке на элементе список (если у него установлен стиль LBS_NOTIFY) посылает родительскому окну уведомление в виде сообщения WM_COMMAND. Обычно список выводит элементы в виде вертикального столбца и позволяет выбрать только один из них. Выбранный (выделенный) элемент подсвечивается системным цветом COLOR_HIGHLIGHT. В Windows есть разновидности списка: список с выбором нескольких элементов, многоколоночных список, список с собственным отображением.
Создание списка Обычный список с одиночным выбором можно создать следующим образом:
Стиль LBS_STANDARD является объединением стилей WS_BORDER, WS_VSCROLL, LBS_NOTIFY и LBS_SORT. Т.е. у списка будет рамка, вертикальная полоса прокрутки, он будет посылать уведомления родительскому окну при смене выделения или при двойном щелчке на элементе, и он будет сортировать элементы по алфавиту. По умолчанию полоса прокрутки включается, только если элементы не умещаются в области списка. По умолчанию список перерисовывает себя при добавлении или удалении элемента. Если добавляется несколько сотен элементов, это может замедлять работу программы и приводить к мерцанию списка на экране. Перед добавлением большого количества элементов можно запретить рисование списка, а затем снова разрешить:
Добавление и удаление элементов Добавление элементов в список выполняется функциями CListBox::AddString и CListBox::InsertString (при вставке строки указывается индекс элемента, начиная с 0):
Текущее количество элементов в списке возвращает функция CListBox::GetCount. CListBox::DeleteString удаляет из списка элемент с заданным индексом. Она возвращает количество элементов, оставшихся в списке. Очистить список полностью может функция CListBox::ResetContent. Бывают полезными функции CListBox::SetItemDataPtr и CListBox::SetItemData, позволяющие сопоставить каждому элементу списка указатель на значение типа DWORD. Этот указатель, связанный с заданным элементом списка, можно получить функцией CListBox::GetItemDataPtr или CListBox::GetItemData. Эта возможность полезна для связи элемента списка с некоторыми дополнительными данными. Например, вы можете поместить в список имена людей, и хранить в элементах списка указатели на структуры, содержащие адреса и телефоны этих людей. Т.к. GetItemDataPtr возвращает указатель типа void*, то потребуется явное преобразование указателя к нужному типу.
Поиск и извлечение элементов списка В CListBox есть функции-члены для получения и изменения текущей позиции выделения, для поиска и извлечения элементов списка. Перечень этих наиболее часто используемых функций (применительно к списку с одиночным выделением) приведены в табл. 7.2. Таблица 7.2. Некоторые функции-члены CListBox для работы с элементами списка
Например, чтобы найти с начала списка и выделить элемент, начинающийся со слова Times (вроде "Times New Roman" или "Times Roman"), можно выполнить следующие вызовы:
Получить строку текущего выделенного элемента можно так:
Уведомления, посылаемые списком В MFC-приложениях уведомления от списка можно обрабатывать в функциях-членах класса, зарегистрированных в карте сообщений с помощью макросов ON_LBN_... (табл. 7.3). Таблица 7.3. Уведомления списка
Из перечисленных уведомлений чаще всего приложения обрабатывают LBN_DBLCLK и LBN_SELCHANGE. Ниже приведен пример обработчика LBN_DBLCLK, в котором выполняется вывод выделенного элемента в информационном окне:
1.3 Статические элементы: класс CStatic Статические ЭУ бывают трех видов: текст, прямоугольные рамки и изображения. Текстовые статические ЭУ часто используются в качестве меток для других ЭУ. Например, создать текстовую метку Имя можно так:
При использовании статических ЭУ для рисования прямоугольных рамок возможны около 10-ти различных вариантов прямоугольников. Они определяются различными стилями SS_, например, прямоугольник с "выдавленными" границами имеет стиль SS_ETCHEDFRAME (его можно использовать вместо группового блока):
При выводе изображений (например, изображение дисковода в программе ScanDisk) статическому ЭУ можно передать дескриптор растрового изображения, указателя мыши, пиктограммы или метафайла GDI. Эти возможности ЭУ задаются стилями: SS_BITMAP, SS_ICON или SS_ENHMETAFILE. Пример ЭУ для вывода пиктограммы:
По умолчанию статические ЭУ уведомлений не посылают, но если создать их со стилем SS_NOTIFY, то возможны 4 типа уведомлений, приведенных в табл. 7.4. Таблица 7.4. Уведомления статических элементов управления
1.4 Элементы редактирования: класс CEdit Элементы редактирования в MFC представлены классом CEdit. Можно выделить два вида элементов редактирования: однострочные и многострочные. На рис. 7.2 показано диалоговое окно с двумя однострочными элементами редактирования (строками ввода). Многострочный элемент редактирования можно увидеть, запустив программу Блокнот из группы стандартных программ Windows. Клиентская область Блокнота – это как раз один многострочный элемент редактирования. Рис. 7.2. Диалоговое окно с двумя строками ввода. Объем данных в этом ЭУ ограничен примерно 60 кб, что не является ограничением строк ввода, но существенно для многострочных элементов. Тогда можно воспользоваться другим ЭУ – элементом редактирования сложного текста (он входит в набор ЭУ Windows 95). Он применяется в программе WordPad. В классе CEdit есть набор функций-членов для работы с элементами редактирования. В MFC есть набор макросов для обработки уведомлений от этих ЭУ. Наиболее часто используются строки ввода, и две функции для получения или задания строки в этом ЭУ: SetWindowText и GetWindowText. Они унаследованы классом CEdit от CWnd.
1.5 Комбинированные списки: класс CComboBox Комбинированный список объединяет строку ввода и список в один ЭУ. Есть три разновидности: "простой", "выпадающий" и "выпадающий список". Простые комбинированные списки используются реже всего – они всегда изображаются в открытом состоянии. Когда пользователь выбирает в списке элемент, он автоматически копируется в строку ввода. Пользователь может также напечатать текст непосредственно в строке ввода. Если введенный пользователем элемент совпадает с некоторым элементом списка, этот элемент автоматически выделяется. Выпадающий комбинированный список отличается тем, что список выводится на экран только по требованию пользователя. Остальные возможности ручного ввода в строку списка остаются. Третий вид списка не позволяет вводить текст вручную, можно только выбирать элементы из списка. Функции-члены CComboBox похожи на функции-члены CEdit и CListBox. Например, элементы добавляются в список функциями CComboBox::AddString и CComboBox::InsertString. Максимальное количество символов для строки ввода задается функцией CComboBox::LimitText. Функции GetWindowText и SetWindowText, унаследованные от CWnd, считывают или устанавливают текст строки редактирования. Есть и функции, уникальные для комбинированного списка, например, ShowDropDown для скрытия или показа выпадающего списка, или GetDroppedState для получения текущего состояния выпадающего списка – открыт он или нет.
1.6 Полосы прокрутки: класс CScrollBar Класс CScrollBar является оболочкой для полос прокрутки. Полосы прокрутки аналогичны тем, которые добавляются в главное окно приложения при использовании оконных стилей WS_VSCROLL и WS_HSCROLL. ЭУ "Полоса прокрутки" создается вызовом CScrollBar::Create. Ее можно поместить в любое место родительского окна и сделать ее любого размера. В отличие от других ЭУ, полоса прокрутки не посылает сообщений WM_COMMAND, а посылает сообщения WM_VSCROLL и WM_HSCROLL. В MFC-приложениях эти сообщения обрабатываются функциями-членами OnVScroll и OnHScroll, как описывалось в предыдущих лекциях. Класс CScrollBar содержит набор функций для работы с полосами прокрутки, большинство из которых похожи на функции-члены CWnd для работы с полосами прокрутки окна верхнего уровня. CScrollBar::GetScrollPos и CScrollBar::SetScrollPos возвращают и устанавливают позицию ползунка полосы прокрутки, GetScrollRange и SetScrollRange возвращает или задает диапазон полосы. Все параметры полосы прокрутки можно установить одним вызовом CScrollBar::SetScrollInfo.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 700; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.103.119 (0.01 с.) |