Академический Документы
Профессиональный Документы
Культура Документы
ЛЕКЦИЯ 3
СОЗДАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ _________________________________________________ 1
Использование стандартных элементов управления __________________________________________ 1
Объявление элемента управления в коде программы _________________________________________ 2
АССОЦИИРОВАННЫЕ ПЕРЕМЕННЫЕ ____________________________________________________ 3
Создание ассоциированных переменных ___________________________________________________ 3
Объявление члена-переменной класса в коде программы _____________________________________ 4
Функции обмена данными ________________________________________________________________ 4
Установка значения элемента управления по умолчанию ______________________________________ 5
Общие свойства элементов управления ____________________________________________________ 5
Выжол Ю.А.
Visual C++ Лекция 3 2
Элемент Название Назначение
Slider Используется для ввода числа, которое отображает реальное по-
Регулятор ложение регулятора
Hot Key
List Control
Выжол Ю.А.
Visual C++ Лекция 3 3
Обратите внимание, что AppWizard не сформировал строк, которые объявляют добавленные в
форму надписи (StaticText), а также на то, что все надписи в форме имеют одно и тоже имя –
IDC_STATIC. Указанная особенность работы связана с тем обстоятельством, что свойства и содержи-
мое надписи в форме очень редко изменяется в ходе выполнения программы. Для того, чтобы иметь воз-
можность манипулировать с надписью, её необходимо объявить в заголовочном файле, добавив строку,
например:
#define IDC_NAME 1007
Добавление идентификатора ресурса можно также выполнить помощью диалогового окна Resource
Symbols. Для этого:
АССОЦИИРОВАННЫЕ ПЕРЕМЕННЫЕ
Для того, чтобы иметь возможность изменять данные, отображаемые в элементе управления или изменять
его свойства необходимо установить соответствие между ресурсами окна и текстом программы. Для этой цели
служат переменные, ассоциированные (связанные) с элементом управления.
Создание ассоциированных переменных
Для этого нужно в меню 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 – определяет выравнивание текста внутри элемента управления по правому краю.
Выжол Ю.А.