Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
- открывается окно «ClassWizard» и выбирается класс диалогового окна (рис. 7);
- выбирается нужный элемент управления по его идентификатору;
- находится и выбирается нужное сообщение;
- нажимается кнопка «Add Function» (если эта кнопка недоступна, то это значит, что обработчик уже создан, и тогда он просто редактируется) и затем кнопка «Edit Code»;
- создается код обработчика.

Рис. 7. Менеджер классов – окно «MFC ClassWizard»
Существуют особенности обработки нажатий клавиш [Enter] и [Escape]. Обе клавиши закрывают окно, но делают это по-разному.
При нажатии клавиши [Enter] Windows ищет кнопку, на которой установлен фокус ввода (кнопка с пунктирной рамкой, рис. 8б). Если такой кнопки нет, то ищется кнопка по умолчанию (у такой кнопки более толстые границы, рис. 8в). Если и такой кнопки нет, то остается последний вариант – вызывается базовая функция CDialog::OnOK, которая вызывает функцию DDV и закрывает окно.
|
|
|
Обычная кнопка | Кнопка с фокусом ввода | Кнопка по умолчанию |
а) | б) | в) |
Рис. 8. Виды кнопок
Для управления процессом установки фокуса выполняются следующие действия:
1) с помощью менеджера классов создается обработчик BN_CLICKED для кнопки IDOK;
2) удаляется код CDialog::OnOK();
3) снимается с кнопки «OK» стиль «Default Button» и изменяется ее идентификатор на ID_OK;
4) изменяется порядок обхода кнопок в окне, то есть указывается, в каком порядке кнопки будут становиться активными при нажатии клавиши [Tab]. Изменение делается через меню «Layout» командой «Tab Order», при выборе команды на экране появятся числа – это и есть порядок обхода (рис. 9). Нажав на объекты в правильном порядке, можно задать необходимый порядок обхода.

Рис. 9. Порядок обхода элементов управления
Конечно, для изменения порядка обхода в окне должно быть не менее трех элементов. Аналогично можно обработать и клавишу [Escape].
Задание № 3. Сделайте необходимые изменения в проекте, который был создан в задании № 1, чтобы обход элементов осуществлялся слева направо и сверху вниз.
4.6. Элементы диалогового окна и их свойства
Находясь в редакторе диалоговых окон, щелкните правой кнопкой по диалоговому окну в свободном от элементов управления месте и выберите команду «Properties». Откроется окно «Dialog Properties» (рис. 10). В этом окне можно установить стили диалогового окна и его свойства.

Рис. 10. Окно «Dialog Properties»
Рассмотрим основные элементы, меняющие свойства окна:
- Font – выбор размера и гарнитуры шрифта диалогового окна;
- XPos, YPos – начальное положение диалогового окна при старте приложения относительно верхнего левого угла экрана (смотри стиль Absolute Align), но если установлен пункт Center, то поля игнорируются;
- Caption – заголовок окна;
- Menu – подключаемое меню;
- Border – вид рамки окна;
- Title Bar – отображается или нет строка заголовка;
- System Menu, Minimize / Maximize Box, Context Help – кнопки системного меню;
- Horizontal / Vertical Scroll – полосы прокрутки;
- System Modal – системное модальное окно;
- Absolute Align – указывает, относительно чего задаются XPos / YPos: всего экрана или родительского окна;
- Disabled – создается окно, которое по умолчанию недоступно;
- Center – центрирует окно на экране;
- Center Mouse – центрирует окно по положению мыши;
- Tool Window – создает окно с более узкой строкой заголовка (как на панели инструментов);
- Client Edge – окно с «утопленной» рабочей областью;
- Transparent – прозрачное окно (действует только в Windows 2000/XP);
- Accept Files – позволяет окошку реагировать на перетаскивание в него файлов;
- Control Parent – позволяет переключаться между диалоговым и родительским окном с помощью клавиши [Tab];
- Right-to-left reading order – центровка текста.
С помощью панели инстурментов «Controls» (см. также рис. 6 на стр. 50) можно добавить на диалоговом окне:
- рисунок
(Picture);
- статический текст
(Static Text);
- поле ввода
(Edit Box);
- рамку
(Group Box);
- кнопку
(Button);
- флажок
(Checkbox);
- переключатель
(Radio Button);
- поле со списком
(Combobox);
- список
(Listbox);
- горизонтальную полосу прокрутки
(Horizontal Scrollbar);
- вертикальную полосу прокрутки
(Vertical Scrollbar);
- счетчик
(Spin);
- индикатор продвижения
(Progress);
- ползунок
(Slider);
- горячую клавишу
(Hot Key);
- графический список
(List Control);
- древовидный список
(Tree Control);
- вкладки
(Tab Control);
- анимацию
(Animate);
- поле ввода с форматированием
(Rich Edit);
- выбор даты времени
(Date Time Picker);
- календарь
(Month Calendar);
- IP адрес
(IP Adress);
- пользовательский элемент
(Custom Control);
- расширенный комбинированный список
(Extended Combobox).
Некоторые из этих элементов являются статическими. Они несут лишь декоративный или вспомогательный смысл. Если эти элементы не изменяются во время выполнения программы, то им можно оставить идентификатор по умолчанию, если же необходимо их менять или управлять ими, то можно сменить идентификаторы.
Рамка. Ограничивает общие по смыслу элементы. Рассмотрим основные свойства рамки:
- Horizontal Alignment – указывает расположение заголовка рамки;
- Icon / Bitmap – устанавливает вместо текстового заголовка пиктограмму или рисунок в формате BMP;
- Flat, Client Edge, Static Edge, Modal Frame – указывает глубину / высоту положения рамки;
- Accept Files – позволяет окну реагировать на перетаскивание в него файлов;
- Right-to-left reading order – центровка текста вправо.
Разберем на примере, как вставить вместо заголовка рисунок или пиктограмму:
1) в редакторе диалоговых окон добавляется рамка и назначается ей идентификатор IDC_GROUP;
2) создается обработчик функции WM_INITDIALOG для диалогого окна;
3) в менеджере классов выбираются класс CDialogBox и сообщение WM_INITDIALOG, нажимается кнопка «Add Fnction», а затем «Edit Code»;
4) пишется следущий код:
// Получаем указатель на элемент управления
// по идентификатору
CButton* GroupBox=(CButton*)GetDlgItem(IDC_GROUP);
// Назначаем стандартную иконку вопросительного
// знака (IDI_QUESTION)
GroupBox->SetIcon(::LoadIcon(NULL, IDI_QUESTION));
Аналогично можно вставлять и рисунки через SetBitmap(HBITMAP) и ::LoadBitmap(HINSTANCE, int).
Статический текст. Используется в качестве подписи к полям. Обычно текст сразу вписывается, но можно задать текст и во время исполнения программы. Для этого выполняются следующие действия:
1) открывается редактор диалоговых окон, и вставляется в него текст с назначением идентификатора IDC_STATICTEXT;
2) добавляется обработчик для нового элемента;
3) в менеджере классов на вкладке «Member Variables» в списке «Control ID’s» выбирается IDC_STATICTEXT и нажимается кнопка «Add Variable». Вводится имя переменной m_Text и выбирается для нее класс CString.
4) в обработчике OnDialog (в менеджере классов выбирается класс CView, идентификатор IDM_DIALOG, сообщение COMMAND и нажимается кнопка «Edit Code») добавляется следущий код (до функции DoModal):
dlg. m_Text="Новый текст";
Данный прием «переменая – инициализация» является основой теории модальных окон.
Основные свойства статического текста:
- Align Text – форматирование текста (справа / слева);
- Center Vertically – центровка по вертикали;
- No prefix – запрещает использование символа «&» как знака для горячей клавиши и просто отображает его в тексте;
- No wrap, simple – сжатый текст без разрывов;
- Sinken, Border, Client Edge, Static Edge, Modal Frame – указывает глубину / высоту положения рамки;
- Transperent – прозрачное поле.
Другие основные свойства данного элемента совпадают со свойствами элемента «Рамка».
Рисунок. Отображает в себе рисунок, пиктограмму или пустую рамку в зависимости от свойств. Для инициализации элемента необходимо задать один из типов (Type):
- Frame (рамка);
- Rectangle (закрашенная рамка);
- Icon (пиктограмма);
- Bitmap или Enhanced Metafile (*.emf).
Затем для Frame и Rectangle задают цвет заливки / закраски, а для Bitmap / Icon – ресурс с пиктограммой или рисунком (в поле Image). Enhanced Metafile загружается программно.
Свойства элемента «Рисунок»: Sinken, Border, Client Edge, Static Edge, Modal Frame – указывают глубину / высоту положения рамки.
Списки и поля ввода. Эти элементы в основном используются для заполнения форм. Они предоставляют пользователю возможность ввода текста и выбора предопределенных значений.
Элементы «Поле ввода» и «Поле ввода с форматированием» используются для ввода текста. Эти два поля внешне одинаковы, но обычное поле ввода имеет ограничение на длину текста в 64 Кбайт и поддерживает лишь один тип шрифта, а поле с форматированием поддерживает больший объем текста и позволяет использовать шрифтовые выделения, но использование полей с форматированием в данной лабораторной работе не рассматривается.
Все свойства полей определяются следующими стилями:
- Align Text – форматирование текста (справа / слева);
- Multiline – многострочное поле;
- Number – вводятся только числа;
- Auto HScroll / Auto VScroll – текст автоматически прокручивается вправо / вверх, когда курсор достигает края поля ввода;
- Horizontal / Vertical Scroll – линейки прокрутки для поля;
- Password – вводимые символы заменяются на знаки (применяется для ввода пароля);
- Uppercase – автоматический перевод вводимых символов в верхний / нижний регистр;
- No Hide Selection – выделенный текст остается выделенным, когда поле теряет фокус ввода;
- Want return – для многострочного поля нажатие Enter приводит к новой строке, а не к нажатию кнопки по умолчанию;
- Border – рамка вокруг поля;
- Sinken, Border, Client Edge, Static Edge, Modal Frame – указывает глубину / высоту положения рамки;
- Read Only – текст в поле можно только читать, а редактировать его нельзя;
- Left Scroll bar – отображает линейку прокрутки у левого края поля ввода.
Также имеются и другие свойства у элементов «Поле ввода» и «Поле ввода с форматированием», которые аналогичны свойствам других элементов.
Комбинированный список. Комбинированные списки предлагают пользователю сделать выбор из ограниченного числа вариантов или добавить новый вариант. Комбинированные списки делятся на три типа:
1) simple (простой) – этот список не содержит кнопки открытия выпадающего списка, он просто расположен ниже поля ввода; в него можно ввести любые данные или выбрать имеющиеся;
2) dropdown (выпадающий) – можно выбирать существующие элементы и вводить свои;
3) drop list (выпадающий список) – можно выбирать только существующие элементы.
Заполнить элементы списка можно в редакторе окон и в самой программе. Для первого варианта необходимо на вкладке «Data» в меню «Properties» заполнить список, причем ввод элемента списка следует завершать клавишами [Ctrl+Enter].
Размер списка в раскрытом состоянии можно изменить, нажав на кнопку раскрытия списка и отрегулировав нижнюю границу списка.
Основые свойства данного элемента:
- Type – тип списка;
- Sort – сортировка элементов списка по алфавиту;
- Vertical Scroll – вертикальная линейка прокрутки;
- Disable no scroll – сохраняет полосу прокрутки, даже если в списке мало элементов;
- Auto HScroll – автоматический сдвиг вводимого текста влево (если не хватает места по ширине списка);
- Uppercase – автоматический перевод вводимых символов в верхний / нижний регистр;
- Sinken, Border, Client Edge, Static Edge, Modal Frame – указывает глубину / высоту положения рамки.
Другие свойства аналогичны таким же свойствам у других элементов.
Список. Обычный список – это упрощенный вариант комбинированного списка без выпадающей части. Он не поддерживает начальное заполнение и заполняется в коде программы. Общий список обладает рядом приемуществ. Например, всегда видно его содержание и он поддерживает много колонок.
Свойства списка следующие:
- Type – тип списка;
- Border – рамка вокруг списка;
- Sinken, Border, Client Edge, Static Edge, Modal Frame – указывает глубину / высоту положения рамки;
- Sort – сортировка элементов списка по алфавиту;
- Horizontal / Vertical Scroll – полосы прокрутки для списка;
- Selection – сколько пользователю можно выбирать элементов списка: только один (Single), много (Multiple или Extended), ни одного (None);
- Use Tabstops – разрешает использовать при вводе клавишу [Tab];
- Multi-column – список с несколькими колонками;
- Disable no scroll – сохраняет линейку прокрутки, даже если в списке мало элементов.
Флажки и переключатели. Флажки и переключатели используются, когда пользователь должен выбрать из небольшого строго ограниченного числа элементов. Причем флажки используются, когда можно выбирать больше одного элемента, а переключатели используются для выбора одного элемента из нескольких.
Создание флажков простое – расположили их и подписали. А переключатели необходимо сгруппировать. Допустим, нужно создать две группы переключателей. Например, разрешение экрана и количество цветов. Для этого выполняют следующие действия:
1) создают все элементы управления строго по порядку, например, 640x480, 800x600, 1024x768, 8 bit, 16 bit, 24 bit (их можно сгруппировать и даже обвести рамочкой, но это никак не повлияет на их работу);
2) каждой первой кнопке в каждой группе устанавливают стиль «Group» (рис. 11).

Рис. 11. Задание группы элементов
Большинство свойств у элементов общие:
- Left Text – подпись слева относительно элемента;
- Tri-state – элемент имеет три сосояния: выбран, невыбран и неактивен;
- Push-like – вместо галочек и точек будет кнопка, которая может быть утопленной и отжатой;
- Multiline – многострочные подписи;
- Icon / Bitmap – вместо текста подписи будет отображаться рисунок или пиктограмма;
- Vertical / Horizontal alignment – направление вертикальной / горизонтальной привязки.
Остальные свойства аналогичны таким же свойствам у других элементов.
Теперь рассмотрим создание простого приложения, содержащего перечисленные выше элементы интерфейса. Для создания приложения необходимо выполнить следующие действия:
1. В редакторе ресурсов создаем окно (рис. 12) и присваиваем ему идентификатор IDD_FRAMEDIALOG.
2. Переключатели должны создаваться в последовательном порядке («Желтый» – «Красный» – «Синий», «Дерево» – «Металл» – «Пластик»), и для «Желтый» и «Дерево» должен быть указан стиль «Group».
3. У поля «Пароль» свойство «Password» должно быть установлено, а у поля «Серийный номер» должно быть установлено поле «Number».
4. Кнопки «OK» и «Cancel» должны иметь идентификаторы IDOK и IDCANCEL.
5. Остальные идентификаторы необходимо расставить так, как указано в табл. 12. Все идентификаторы строго произвольны и не несут никакой смысловой нагрузки.
Таблица 12
Названия идентификаторов
Название элемента интерфейса | Идентификатор | Название элемента интерфейса | Идентификатор |
Поле ввода «Имя» | IDE_NAME | Переключатель «Желтый» | IDR11 |
Поле ввода «Серийный номер» | IDE_SERIAL | Переключатель «Красный» | IDR12 |
Поле ввода «Пароль» | IDE_NAME | Переключатель «Синий» | IDR13 |
Флажок «Номер 1» | IDC_CHECK1 | Переключатель «Дерево» | IDR21 |
Флажок «Номер 2» | IDC_CHECK2 | Переключатель «Металл» | IDR22 |
Флажок «Номер 3» | IDC_CHECK3 | Переключатель «Пластик» | IDR23 |
Первый Combobox | IDC_COMBO1 | Кнопка «Установить» | IDB_SET |
Второй Combobox | IDC_COMBO2 | ||
Третий Combobox | IDC_COMBO3 | ||
ListBox | IDC_LIST |
6. У первого комбинированного списка необходимо установить тип «Simple» и ввести данные: «тип А», «тип Б».
7. У второго комбинированного списка нужно установить тип «Dropdown» и ввести данные: «Покраска», «Ткань», «Пластик».
8. Для третьего комбинированного списка нужно установить тип «Drop List» и ввести данные: «Нет», «Машиной», «Ж/Д».
9. Затем в менеджере классов выбирают пункт «Create New Class» с именем CFormDialog, переходят на вкладку «Member Variables» и добавляют переменные для полей ввода: «Имя» – m_name, «Серийный номер» – m_serial, «Пароль» – m_pword.

Рис. 12. Пример диалогового окна
10. Для IDC_CHECK1, IDC_CHECK2 и IDC_CHECK3 – переменные m_check1, m_check2 и m_check3 типа BOOL.
11. Для IDC_COMBO1, IDC_COMBO2 и IDC_COMBO3 – переменные m_frm, m_otd и m_transport типа Cstring.
12. Для поля IDE_NAME – m_name типа CString.
13. Для поля IDE_PASSWORD – m_pword типа Cstring с указанием в поле «Maximum Characters» значения 16 – это будет максимальная длина пароля.
14. Для поля IDE_SERIAL – m_serial типа int с указанием минимального значения – 0, максимального – 9999.
15. Для IDR11 и IDR21 m_color и m_material, соответсвенно, оба типа int.
16. В редакторе меню вставляют пункт меню с названием Form и идентификатором IDM_FORM.
17. С помощью менеджера классов добавляют обработчик нового пункта меню (на самой первой вкладке, в классе CWindowView, выбирают из списка пункт IDM_FORM и сообщение COMMAND, после чего нажимают кнопку «Add Function» и затем «Edit Code»).
18. Вводят следующий код:
CFormDialog fDlg; //Создание нового объекта класса
// Начинаем заполнять начальные значения полей,
// положение флажков и других элементов
fDlg. m_check2=TRUE; // Помечаем второй флажок
// Переключатель Цвет ставим в положение Желтый
fDlg. m_color=0;
// Переключатель Материал – в положение Пластик
fDlg. m_material=2;
fDlg. m_name="Иван"; // Заполняем поле имени
fDlg. m_serial=1117; // Заполняем поле серийного номера
// Вводим начальные положения комбинированных списков
fDlg. m_transport=0;
fDlg. m_frm="Тип А";
fDlg. m_otd="Ткань";
//Запускаем окно
fDlg. DoModal();
Пояснения. В коде присваиваются переменным их начальные значения. Особенности присвоения: флажки, обладая возможностью многозначного выбора, инициализируются отдельно переменой типа BOOL, у которой есть 2 значения TRUE, FALSE (значение по умолчанию FALSE), а вот переключатели имеют отдельную переменную для всей группы (и она уже типа int) и нумерут все значения: 0 соответствует первому значению, 1 – следущему и т. д. Комбинированнные списки, которые допускают ввод произвольного текста, инициализируются строкой, а те, у которых можно выбирать лишь предопределенные значения, – целым числом, аналогично и для простого списка.
19. Вставляют в файл DWindowView. cpp строчку
#include "FormDialog. h"
20. В менеджере классов создают обработчик сообщения WM_INITDIALOG функции класса CFormDialog.
21. Добавляют следующий код:
//Получаем указатель на список
CListBox* pLB = (CListBox*) GetDlgItem(IDC_LIST);
//Вставляем элемент в конец списка
pLB->InsertString(-1, "Шкаф");
pLB->InsertString(-1, "Полка");
pLB->InsertString(-1, "Стол");
Комментарий. Функция GetDlgItem() возвращает указатель на объект по его идентификатору. А функция InsertString добавляет строку в список (число -1 указывает, что надо вставлять в конец списка, в общем случае это номер элемента, после которого надо вставить новый элемент). Аналогично добавляются элементы и к комбинированному списку. Удалять строки можно функцией DeleteString(), а полностью очистить – ResetContent().
22. Добавляют код, чтобы сменить стандартные символы для сокрытия пароля:
CEdit* pEB = (CEdit*) GetDlgItem(IDE_PASSWORD);
pEB->SetPasswordChar(44);
23. Добавляют обработчик нажатия кнопки «Установить». В менеджере классов добавляют функцию для класса CFormDialog, идентификатора IDB_SET и сообщения COMMAND.
MessageBox("Установлено");
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


