учебное пособие. Часть1. Информатика
.pdf•CComboBox – элементы управления, которые отображают список пунктов переменной длины.
•CScrollBar – горизонтальные и вертикальные полосы прокрутки.
•CEdit − элементы управления с одно- и многострочным редактиро- ванием текста.
Для каждого элемента создается свой класс, а значит, свои поля и свои методы. Этот список можно расширить за счет использования элементов
управления ActiveX.
Большинство приложений в дополнении к элементам управления ис- пользует ресурсы. Ресурсы представляют специальную форму данных, пред- назначенную только для чтения, и они связаны в выполняемый файл про- граммой, называемой компилятором ресурсов. Ресурсы входят в два базовых множества:
•Двоичные – графические ресурсы, включающие пиктограммы, кур- соры и растровые изображения.
•Текстовые – структурные ресурсы, включающие диалоговые окна, меню, таблицы строк и таблицы акселераторов.
Двоичные ресурсы находятся в отдельных файлах, а текстовые хранят- ся в простом текстовом файле ASCII, который описывает структуру каждого элемента. Этот файл называется описанием ресурсов и обычно имеет то же имя, что и проект, но только с расширением rc.
13.8. Изменение пиктограммы приложения
Пиктограмма отображается в нескольких местах:
•возле имени программы в Windows Explorer;
•в названии окна приложения;
•на рабочем столе, если создан ярлык для приложения;
•в диалоговом окне About.
По умолчанию пиктограмма для программ VC представляет собой три кубика с буквами MFC. Для изменения пиктограммы необходимо в Рабочем пространстве Project Workspace выбрать закладку ResourсeView. Открыть папку Icon и дважды щелкнуть на пункте IDR_MAINFRAME. От- крывается окно редактора BitMap Editor VC, который позволяет редак- тировать пиктограмму и предоставляет в распоряжение программиста раз- личные инструменты.
Следует заметить, что пиктограммы бывают разных размеров. Обычный размер 32х32 пикселя по- является на рабочем столе, когда пользователь выбирает большие значки. Когда пользователь выбирает мелкие значки, то размер иконок 16х16. Чтобы не создавать пиктограмму для каждого размера, необходимо удалить маленькую пиктограмму из файла. Для этого выбираем пункт Small(16x16) из раскрывающегося списка, затем команду Delete Device Image (удалить изображение устройства) из пункта главного
меню Image. После этого Windows, выполняя программу, не находит маленькую пиктограмму, она про-
сто соответствующим образом изменяет размеры большой пиктограммы. Вот теперь можете придавать сво- ей пиктограмме запоминающийся вид. Сохраните свою программу и запустите. Посмотрите, как она выгля- дит в различных местах: в программе, в проводнике и т. д.
311
13.9. Окно ABOUT
Программа Hello.exe включает в себя диалоговую панель About (информацию об авторе), по- скольку на шаге 2 MFC AppWizard в качестве одной из возможностей было окно About. Для доступа к диалоговой панели About программы Hello.exe, необходимо открыть системное меню, щелкнув на пик- тограмме в левом верхнем углу окна приложения. Выберите из системного меню About Hello. В ответ получаете диалоговую панель About Hello. Такая панель создается по умолчанию. Для изменения со- держимого панели закрываем приложение, в рабочем пространстве выбраем закладку ResourсeView, открываем папку Dialog, а в папке пункт IDD_ABOUTBOX. Теперь панель About доступна для редактиро- вания.
13.10. Проект «Окружность»
Этот проект демонстрирует использование таких элементов управления, как EditBox – окно редак- тирования и StaticText.
Перед нами простейшая задача: по заданному радиусу определить площадь круга. Начнем с того, как будет выглядеть приложение после запуска программы (рис. 41).
Рис. 41.
Чтобы не выдавать детализированные пошаговые инструкции по разра- ботке визуальной части проекта, построим сводную таблицу (табл. 7) свойств используемых элементов управления [30].
312
|
|
Таблица 19 |
|
|
|
|
|
Объект |
Свойство |
Установка |
|
|
|
|
|
1 |
2 |
3 |
|
|
|
|
|
Dialog Box |
ID |
IDD_CIRCLE1_DIALOG |
|
(диалоговая панель) |
|||
|
|
||
|
|
|
|
|
Caption(заголовок) |
Circle1 |
|
|
|
|
|
|
Font(шрифт) |
System, Size 12 (страница General) |
|
|
|
|
|
|
Флажок minimize |
Отмечен (страница Styles) |
|
|
|
|
|
|
Флажок maximize |
Отмечен (страница Styles) |
|
|
|
|
|
Group Box |
ID |
IDC_STATIC |
|
(панель группы) |
|||
|
|
||
|
|
|
|
Static text |
ID |
IDC_STATIC |
|
(статический текст) |
|||
|
|
||
|
|
|
|
|
Caption |
R: |
|
|
|
|
|
Static text |
ID |
IDC_STATIC |
|
|
|
|
|
|
Caption |
SQR: |
|
|
|
|
|
Edit Box(окно |
ID |
IDC_RADIUS_EDIT |
|
редактирования) |
|||
|
|
||
|
|
|
|
Edit Box |
ID |
IDC_SQR_EDIT |
|
|
|
|
|
Check Box (флажок) |
ID |
IDC_VISIBLE_CHECK |
|
|
|
|
|
|
Caption |
&Visible |
|
|
|
|
|
Check Box |
ID |
IDC_ENABLED_CHECK |
|
|
|
|
313
|
|
Окончание табл. 7 |
|
|
|
1 |
2 |
3 |
|
Caption |
&Enabled |
|
|
|
Push Button |
ID |
IDC_EXIT_BUTTON |
|
|
|
|
Caption |
E&xit |
|
|
|
Push Button |
ID |
IDC_SQR_BUTTON |
|
|
|
|
Caption |
& Sqr |
|
|
|
|
Client edge |
Отмечен (страница Extended) |
|
|
|
|
Static edge |
Отмечен (страница Extended) |
|
|
|
|
Modal frame |
Отмечен (страница Extended) |
|
|
|
Значок амперсант & перед символом в заголовке означает, что этот символ на элементе управления подчеркивается, и пользователь может обращаться к элементу управления по горячим клавишам: ALT+
подчеркнутый символ.
3.Связывание переменных с окнами редактирования и флажками
4.Переменные, связанные с окнами редактирования и флажками, дают доступ к этим элементам управления.
Чтобы связать переменную с окном редактирования C_RADIUS_EDIT следует:
•выбрать СдфыыЦшяфкв в меню Мшуцж
•в появившейся диалоговой панели ClassWizard выбрать закладку Member Variables (переменные-элементы);
•проверить в окне редактирования Class name установку класса (т. е. связываемая переменная будет элементом класса) CCircle1Dlg, который отвечает за диалоговую панель;
•выбрать в списке объект IDC_RADIUS_EDIT;
•щелкуть на кнопке Add Variable(добавить переменную);
• в появившейся диалоговой панели Add Member Variable ввести в окна редактирования:
314
Member Variable name (имя переменной-элемента): m_Radius Category (категория): value
Variable type (тип переменной): float
• щелкнуть на кнопке OK.
Аналогично связать переменную m_SQR типа double c окном редакти-
рования IDC_SQR_EDIT, m_VisibleCheck типа BOOL c флажком IDC_VISIBLE_CHECK и переменную m_EnabledCheck типа BOOL c флажком IDC_ENABLED_CHECK.
5.Код, инициализирующий флажки
Когда запускается программа, отметки флажков Visible и Enabled включены. Чтобы написать код, включающий флажки при запуске приложе- ния, необходимо:
•выбрать СдфыыЦшяфкв в меню Мшуцж
•в появившейся диалоговой панели ClassWizard выбрать закладку
Message Maps;
•проверить в Class name установку класса CCircle1Dlg, который отвечает за диалоговую панель;
•выбрать в списке объект CCircle1Dlg;
•в окне Message выбрать WM_INITDIALOG – это событие происхо- дит при инициализации диалоговой панели;
•щелкнуть на кнопке Edit Code.
Теперь появляется возможность редактировать функцию OnInitDialog(), часть кода которой уже написана. Свой код добавляем
после строки с комментарием
//TODO и т.д. m_VisibleCheck = TRUE; m_EnabledCheck = TRUE; UpdateData ( FALSE );
Последняя функция обновляет экран, т. е. передает значения перемен- ных элементам управления.
После этого можно сохранить программу и запустить на выполнение.
Скнопкой Exit связываем уже известный код OnOK().
Скнопкой SQR связываем следующий код:
char strStr[10]; CString strStr1; UpdateData ( TRUE ); if ( m_Radius>0 )
{
m_Sqr = 3.14*m_Radius*m_Radius;
315
UpdateData ( FALSE );
}
else
{// Преобразование целого в строку itoa (m_Radius, strStr, 10);
strStr1 = "R = " + (CString)strStr + "\nВведите R –
положительным!";
MessageBox ( strStr1, "ERROR", MB_ICONINFORMATION);
}
В этом фрагменте программы используется strStr1 – представитель класса CString. Класс CString служит для обработки строк. Здесь он ис- пользуется для сцепления строк:
strStr1="R="+(CString)strStr+"\nВведите R - положительным!";
Функция UpdateData()в зависимости от параметра обновляет экран или переменные:
UpdateData(TRUE) – обновляет переменные, т. е. передает перемен- ным значения, считанные с соответствующих элементов управления.
UpdateData(FALSE) – обновляет экран, т. е. передает элементам управления соответствующие значения переменных.
Связывание кода с событием BN_CLICKED флажка Visible
Cобытие BN_CLICKED флажка происходит каждый раз, когда вклю- чаете или отключаете его отметку. Для связывания кода с событием
BN_CLICKED флажка Visible необходимо:
•выбрать СдфыыЦшяфкв в меню Мшуцж
•в появившейся диалоговой панели ClassWizard выбрать закладку
Message Maps;
•проверить в Class name установку класса CCircle1Dlg, который отвечает за диалоговую панель;
•выбрать в списке объект IDC_VISIBLE_CHECK;
•в окне Ьуыыфпу выбрать ИТ_СДШСЛУВ
•щелкнуть на кнопке Edit Code.
Свой код добавляем после строки с комментарием
//TODO и т.д. UpdateData ( TRUE );
if ( m_VisibleCheck == TRUE )
GetDlgItem (IDC_RADIUS_EDIT) -> ShowWindow(SW_SHOW); else
GetDlgItem (IDC_ RADIUS _EDIT) ->ShowWindow(SW_HIDE);
Аналогично связываем код с флажком Enabled:
UpdateData(TRUE);
316
if ( m_EnabledCheck == TRUE )
GetDlgItem (IDC_ RADIUS _EDIT1) ->EnableWindow(TRUE); else
GetDlgItem (IDC_ RADIUS _EDIT1)->EnableWindow(FALSE);
Функция GetDlgItem() возвращает указатель на соответствующий элемент управления (окно редактирования). С помощью этого указателя вы- зывается функция соответствующего класса.
Программировать под Windows с использованием MFC гораздо легче и быстрее, чем только с функциями API. Но код программы получается бо- лее компактным и эффективным, если каркас программы создается с помо-
щью функций API.
317