Вы находитесь на странице: 1из 6

Visual C++ Лекция 3 1

ЛЕКЦИЯ 3
СОЗДАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ _________________________________________________ 1
Использование стандартных элементов управления __________________________________________ 1
Объявление элемента управления в коде программы _________________________________________ 2
АССОЦИИРОВАННЫЕ ПЕРЕМЕННЫЕ ____________________________________________________ 3
Создание ассоциированных переменных ___________________________________________________ 3
Объявление члена-переменной класса в коде программы _____________________________________ 4
Функции обмена данными ________________________________________________________________ 4
Установка значения элемента управления по умолчанию ______________________________________ 5
Общие свойства элементов управления ____________________________________________________ 5

СОЗДАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ


Использование стандартных элементов управления
Богатая палитра образцов элементов управления (инструментарий) имеется в ва-
шем распоряжении для того, чтобы вставлять те или иные из них в диалоговое окно прило-
жения. Для установки элементов диалогового окна используется технология, получившая
наименование WYSIWYG(What You See Is What You Get – то, что видишь, то и получишь).
Отобразите на экране панель инструментов Controls с помощью контекстного меню лю-
бой панели инструментов. Если вы хотите установить в свое диалоговое окно элемент
управления, нужно выбрать его образец на поле инструментария, "перетянуть" в желае-
мое место на поле заготовки окна приложения, "сбросить" его там, заменить надпись. В
диалоговом окне приложения вы можете использовать все типовые для приложений Win-
dows элементы управления.
Элемент Название Назначение
Picture Фрейм предназначен для отображения графических изображений.
Графический фрейм Может служить контейнеров для других элементов управления
Static Text Надпись предназначена для отображения текста, который пользо-
Надпись ватель не может изменить
Edit Box Текстовое поле служит для отображения, ввода и редактирования
Текстовое поле текста
Group Box Служит контейнеров для других элементов управления. Кроме того,
Группа он позволяет сгруппировать несколько элементов управления
Button Служит для инициирования некоторых действий программы после
Кнопка щелчка на ней кнопкой мыши
Check Box Служит для отображения и установки значения логических пара-
Флажок метров (типа Да/Нет)
Radio Button Служит для выбора одного параметра из нескольких, представлен-
Переключатель ных в группе
Combo Box Позволяет пользователю выбрать одно значение из списка или вве-
Поле со списком сти новое значение
List Box Служит для выбора элемента из списка. Пользователь не может
Список непосредственно менять элементы в списке
Horizontal Scroll
Bar Используется для ввода числа, которое отображает реальное по-
Горизонтальная по- ложение бегунка на полосе прокрутки
лоса прокрутки
Vertical Scroll Bar
Вертикальная полоса То же, что и элемент Horizontal Scroll Bar
прокрутки
Spin Используется для изменения значения числа в связанном тексто-
вом поле
Progress
Индикатор выполне- Отображает долю выполнения операции
ния

Выжол Ю.А.
Visual C++ Лекция 3 2
Элемент Название Назначение
Slider Используется для ввода числа, которое отображает реальное по-
Регулятор ложение регулятора
Hot Key

List Control

Tree Control Используется для отображения данных иерархической структуры


Дерево
Tab Control Позволяет расположить элементы управления на нескольких вклад-
Вкладки ках в одно окне
Animate Позволяет отображать анимационные эффекты в окне
Анимация
Rich Edit Отображает и позволяет редактировать текст, содержащий элемен-
Поле с форматиро- ты форматирования
ванным текстом
Data Time Pickerr Позволяет программе выполнять различные действия с таймером
Таймер
Calendar Отображает календарь и упрощает ввод дат
Календарь
IP Address
IP адрес
Custom Control
Выбираемый элемент
управления
Extended Combo
Box
Расширенное поле
со списком

Объявление элемента управления в коде программы


Давайте проследим за тем, какие изменения в коде программы сделал AppWizard после вставки в диа-
логовое окно элементов управления. С этой целью:
откомпилируйте приложение;
в окне Workspace (рабочее пространство) откройте вкладку FileView;
в папке Header Files (заголовочные файлы) откройте заголовочный файл Resource.h.
Заголовочный файл Resource.h будет содержать строки примерно
следующего вида:
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_PRESS_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_V 1001
#define IDC_M 1002
#define IDC_F 1003
#define IDC_CALC 1005
#define IDC_FILENAME 1006
В каждой строке приведённого фрагмента кода объявляется существующий в программе элемент
управления. Первые пять строк AppWizard сформировал при создании приложения. Остальные строки
появились в коде после добавления элементов управления в форму. Эти строки сформированы по про-
стому правилу:
#define + ИмяЭлементаУправления + НомерЭлементаУправления
Номер элемента управления уникальный. Номера элементов управления, добавленные в форму
пользователем, больше 1000.
Объявление элементов управления необходимо для программного изменения их свойств и содер-
жащихся в них данных.

Выжол Ю.А.
Visual C++ Лекция 3 3
Обратите внимание, что AppWizard не сформировал строк, которые объявляют добавленные в
форму надписи (StaticText), а также на то, что все надписи в форме имеют одно и тоже имя –
IDC_STATIC. Указанная особенность работы связана с тем обстоятельством, что свойства и содержи-
мое надписи в форме очень редко изменяется в ходе выполнения программы. Для того, чтобы иметь воз-
можность манипулировать с надписью, её необходимо объявить в заголовочном файле, добавив строку,
например:
#define IDC_NAME 1007
Добавление идентификатора ресурса можно также выполнить помощью диалогового окна Resource
Symbols. Для этого:

выберите команду меню View ► Resource Symbols…;


в диалоговом окне Resource Symbols нажмите кнопку New…;
в диалоговом окне New Symbols введите имя идентификатора в поле Name, например
IDC_NAME;
в поле Value введите номер идентификатора, например 1007;
нажмите кнопку ОК.
При удалении элемента управления из формы, как правило, из файла Resource.h удаляется и
строка кода, которая этот элемент управления объявляет.

АССОЦИИРОВАННЫЕ ПЕРЕМЕННЫЕ
Для того, чтобы иметь возможность изменять данные, отображаемые в элементе управления или изменять
его свойства необходимо установить соответствие между ресурсами окна и текстом программы. Для этой цели
служат переменные, ассоциированные (связанные) с элементом управления.
Создание ассоциированных переменных
Для этого нужно в меню View или контекстном меню выбрать команду ClassWizard. В открыв-
шемся диалоговом окне MFC ClassWizard откройте вкладку Member Variables.

Выжол Ю.А.
Visual C++ Лекция 3 4
Вкладка Member Variables позволяет легко установить соответствие между текстом программы и
ресурсами окна. Щелкните в строке c именем элемента управления, а затем на кнопке Add Variables.
Это приведет к появлению на экране диалогового окна Add Member Variables.
Выберите в списке Category категорию переменной. Член-переменная класса нового диалогового
окна соответствует либо значению (Value), которое есть
содержимое элемента управления, либо самому элементу как
программному объекту (Control).
В поле Member variable name введите имя переменной.
Для имён переменных категории Value рекомендуется использо-
вать префикс m_, категории Control – префикс c_,
В списке Variable type выберите тип переменной. Ниже
перечислены типы переменных, которые могут быть ассоциированы
с тем или иным типом элемента управления:
текстовые поля – строковый или числовой тип ;
флажки – bool;
переключатели, полоса прокрутки – int ;
список и комбинированный список – строковый тип.
После того как вы щелкнете на кнопке ОК и тем самым добавите переменную в список членов клас-
са, ClassWizard предложит установить некоторые параметры, которые могут быть использованы для
проверки достоверности ввода данных. Если речь идет о переменной строкового типа, связанной с тек-
стовым полем, ClassWizard предлагает в поле Maximum Characters (Максимум символов) устано-
вить максимальную длину вводимой строки. Если же текстовое поле ассоциировано с переменной число-
вого типа, то ClassWizard предлагает установить верхний и нижний предел вводимого пользователем
значения.
В дальнейшем всю работу по проверке соответствия введенного значения установленным ограниче-
ниям и выдачу в случае их нарушения сообщения с просьбой повторить ввод берут на себя функции из
библиотеки MFC. Разработчику думать об этих "мелочах" нет никакой нужды.
Объявление члена-переменной класса в коде программы
Давайте проследим за тем, какие изменения в коде программы сделал
ClassWizard после добавления члена-переменной класса. С этой целью:
в окне Workspace откройте вкладку ClassView;
откройте файл заголовка класса диалогового окна.
Текст файла заголовка класса, который сформировал
ClassWizard, будет содержать объявление переменных-членов класса
и иметь примерно следующий вид:
class CPressDlg : public CDialog
{
public:
CPressDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
enum { IDD = IDD_PRESS_DIALOG };
CStatic c_FileName; // объявление члена переменной класса c_FileName
CString m_FileMame; // объявление члена переменной класса m_FileMame
BYTE m_M; // объявление члена переменной класса m_M
BOOL m_check; // объявление члена переменной класса m_check
int m_radio; // объявление члена переменной класса m_radio
Функции обмена данными
Давайте проследим за тем, какие изменения в коде программы сделал ClassWizard после добавления
члена-переменной класса. С этой целью:
в окне Workspace откройте вкладку ClassView;
откройте класс диалогового окна и выберите метод DoDataExchange.
Метод DoDataExchange вызывается при нажатии кнопки ОК и осуществляет обмен данными ме-
жду элементами управления и ассоциированными с ними членами-переменными класса. Текст метода
DoDataExchange, который сформировал ClassWizard, будет иметь примерно следующий вид:
void CPressDlg::DoDataExchange(CDataExchange* pDX)
{

Выжол Ю.А.
Visual C++ Лекция 3 5
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_M, c_M);
DDX_Control(pDX, IDC_FileName, c_FileName);
DDX_Text(pDX, IDC_V, m_V);
DDV_MinMaxUInt(pDX, m_V, 1, 1024);
DDX_Text(pDX, IDC_F, m_F);
DDV_MinMaxFloat(pDX, m_F, 0.f, 1000.f);
DDX_Text(pDX, IDC_FILENAME, m_FileMame);
DDV_MaxChars(pDX, m_FileMame, 55);
DDX_Text(pDX, IDC_M, m_M);
DDV_MinMaxByte(pDX, m_M, 5, 25);
DDX_Check(pDX, IDC_CHECK, m_check);
DDX_Radio(pDX, IDC_RADIO, m_radio);
}
Все функции, имена которых начинаются с DDX, выполняют обмен данными. Вторым аргументом
каждой функции является идентификатор элемента управления, а третьим – идентификатор члена-
переменной класса.
Имеется 34 функции, чьи имена начинаются с DDX – одна на каждый тип данных, которыми могут
обмениваться диалоговое окно и соответствующий класс. Тип элемента управления указывается в имени
функции после знака подчёркивания. Функции, содержащие в имени Control, осуществляют обмен дан-
ными между диалоговым окном и членом-переменной класса категории Control.
Все функции, имена которых начинаются с DDV, ответственны за проверку заданных ограничений
на вводимые данные.
Второй аргументом вызова функции DDV_MaxChars – идентификатор члена-переменной класса
категории Value типа CString, а третий – максимальная длина вводимой строки. Функция осуществляет
контроль над количеством символов, введённых пользователем в текстовое поле и, в случае нарушения
наложенного ограничения, выводит на экран соответствующее сообщение с приглашением повторить по-
пытку.
Второй аргументом вызова функции DDV_MinMaxFloat – идентификатор члена-переменной
класса категории Value типа Float, а третий и четвёртый – минимальное и максимальное значение вве-
дённого пользователем числа. Функция осуществляет контроль над значением числа, введённого пользо-
вателем в текстовое поле и, в случае нарушения наложенного ограничения, выводит на экран соответст-
вующее сообщение с приглашением повторить попытку.
Установка значения элемента управления по умолчанию
Если у элемента управления существует ассоциированная с ним член-переменная класса категории
Value, то ClassWizard устанавливает для этого элемента управления значение по умолчанию, которое
отображается в элементе управления при открытии диалогового окна. Для членов-переменных класса чи-
слового типа это ноль, типа CString – пустая строка.
Давайте проследим за тем, какие изменения в коде программы сделал ClassWizard после добавления
члена-переменной класса. С этой целью:
в окне Workspace откройте вкладку ClassView;
откройте класс диалогового окна и выберите метод, имя которого совпадает с именем класса диало-
гового окна.
Текст этого метода, который сформировал ClassWizard, будет иметь примерно следующий вид:
CPressDlg::CPressDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPressDlg::IDD, pParent)
{
m_F = 0.0f; //значение по умолчанию члена-переменной класса типа float
m_FileName = _T(""); //значение по умолчанию члена-переменной класса типа CString
m_M = 0; //значение по умолчанию члена-переменной класса типа BYTE
m_check = FALSE; //значение по умолчанию члена-переменной класса типа BOOL
m_radio = -1; //значение по умолчанию элемента управления типа Radio Buttin
}
Если вы хотите изменить значения по умолчанию элементов управления, то для этого необходимо
внести изменения в текст программы.
Общие свойства элементов управления
Свойства элементов управления, как и других объектов, можно установить в окне Proerties, в ко-
тором эти свойства сгруппированы по назначению и расположены на нескольких вкладках.

Выжол Ю.А.
Visual C++ Лекция 3 6
Ниже приведено описание свойств элементов
управления, значение которых можно установить на
вкладке General.
ID – идентификатор элемента управления. Уникаль-
ное имя в диалоговом окне. Строковое выраже-
ние без пробелов и знаков препинания. Реко-
мендуется использовать в имени диалогового
окна префикс IDC_
Caption – строковое выражение, которое отображается в некоторых элементах управления.
Visible – определяет, будет ли элемент управления отображаться при первом появлении диалогового
окна. Тип – Bool. Значение по умолчанию – True.
Disabled – определяет блокировку элемента управления. Если элемент управления заблокирован, то
пользователь не может инициализировать какие-либо события в элементе управления. Тип – Bool.
Значение по умолчанию – False.
Group – определяет первый элемента управления в группе элементов управления. Тип – Bool. Значение
по умолчанию – False.
Tabstop – определяет, может ли элемент управления получить фокус при нажатии клавиши Tab. Тип –
Bool. Значение по умолчанию – True.
Help ID – определяет наличие идентификатора контекстной справки. Тип – Bool. Значение по умолча-
нию – False.
Ниже приведено описание свойств
определяющих внешний вид элемента управления,
значение которых можно установить на вкладке Ex-
tended Styles. Все свойства имеют тип Bool, а
значение по умолчанию – False.
Client edge – устанавливает утопленную границу
элемента управления.
Static edge – устанавливает границу элемента
управления.
Modal frame – устанавливает приподнятую границу элемента управления.
Transparent – элемент управления, использующий этот стиль, прозрачен.
Right aligned text – определяет выравнивание текста внутри элемента управления по правому краю.

Выжол Ю.А.

Вам также может понравиться