Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Прога лабы 5 семестр

.pdf
Скачиваний:
20
Добавлен:
11.02.2015
Размер:
728.33 Кб
Скачать

11

Рис. 9. Диалоговое окно Add Member Variables

Рис. 10. Вкладка Member Variables после добавления переменной

Два раза нажав на кнопку OK в окне ресурсов (диалоговом окне нашего приложения) курсор автоматически будет установлен в функцию обработчик этой кнопки, функция отвечает за действия, которые будут происходить при нажатии на эту кнопку при запуске приложения. В тело функции необходимо добавить вызов одного из методов нашего элемента ActiveX. Написав имя переменной (m_calendar) и поставив точку после него, вы увидите весь список доступных методов для данного объекта ActiveX. Например:

12

m_calendar.NextDay();

Соберите проект, нажав на кнопку Build (F7) панели инструментов, и если все прошло без ошибок, запустите проект на выполнение кнопкой Execute Program (Ctrl F5)(кнопка с иконкой восклицательного знака). (Внимание! Прежде чем запускать проект на выполнение

убедитесь что ваш ActiveX удален из Test Container, иначе могут возникнуть ошибки линковки.)

После выполнения вы увидите диалоговое окно с календарем и двумя кнопками, нажав на кнопку ОК, вы увидите, что в календаре выделится следующий день. Попробуйте вызвать другие методы через новые кнопки.

13

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

Вызовите в программе метод календаря и передайте ему при необходимости требуемые параметры (список этих параметров «подсказывает» Visual C++ при вводе этой функции и открытии круглой скобки):

1.ShowTitle();

2.Day();

3.Month();

4.Year();

5.PreviousDay();

6.Today();

7.ShowDays();

8.ShowDateSelectors();

9.GridCellEffect();

10.FirstDay();

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Какие три основных способа взаимодействия с приложением может иметь ActiveX компонент? Приведите примеры каждого из них.

2.Объясните назначение и возможности основных окон и панелей Visual C++.

3.Объясните взаимодействие контейнера и элемента ActiveX. Какое расширение имеют файлы ActiveX компонентов?

4.Какого типа было наше приложение? Какие ещё типы приложений вы знаете?

5.В чем преимущества технологии Active X?

6.Основные функции и назначение Active X Control Test Container.

7.Что происходит при разрегистрации ActiveX компонента – удаляется ли он из системы?

8.Для чего используется AppWizard, Class Wizard?

9.Какие типы переменных в языке C++ вы знаете, и почему в утилите Test Container среды Visual Studio 6.0 используются другие?

14

ЛАБОРАТОРНАЯ РАБОТА №2

СОЗДАНИЕ ЭЛЕМЕНТОВ ACTIVE X В СРЕДЕ VISUAL C++ С ПОМОЩЬЮ MFC

Цель работы: Освоить основные этапы разработки объектов Active X с помощью MFC, на примере создания собственного объекта-кнопки.

Ход работы:

1.Создание структуры элемента управления Active X.

2.Добавление свойств, методов, событий элемента управления.

3.Разработка программного кода для методов, событий.

4.Добавление программного кода, отвечающего за прорисовку элемента

ActiveX.

5.Создание окна свойств элемента управления.

Общие понятия

Одним из первых методов разработки элементов управления и , до сих пор самым эффективным, является применение библиотеки MFC. Однако в 1997 году Microsoft выпустила вторую версию библиотеки ATL, которая обеспечивает полную поддержку элементов управления ActiveX (разработка ActiveX с помощью ATL будет рассмотрена в лабораторной №3). При разработке ActiveX с помощью MFC необходимо учитывать то, что часть исполняемого программного кода находится в файлах библиотеки. И при повторном использовании или распространении ActiveX необходимо включать эти файлы, которые могут занимать до нескольких Мб.

Итак, если перед вами стоит задача создания профессиональных, высокоэффективных элементов управления, следует пользоваться библиотекой ATL. Она обеспечивает наибольшую гибкость и является наилучшим средством разработки элементов управления ActiveX на C++.

Объекты MFC и ATL могут сосуществовать в одном проекте, но использовать их параллельно достаточно сложно. Кроме того, нельзя с помощью классов MFC управлять объектами Windows, созданными посредством ATL. В итоге, MFC предназначена для использования в больших, сложных, многооконных Windows-приложениях, для которых COM является только одним из свойств.

Создание структуры

В среде Visual C++ для создания разного типа программных объектов и генерации необходимых кодов и файлов используется инструмент AppWizard. В данной лабораторной работе необходимо создать элемент управления – кнопку, которая будет менять форму и цвет.

15

Чтобы сгенерировать файлы, содержащие текст программы компонента Active X, необходимо выполнить следующие действия.

1.Выбрать команду New… меню File и открыть вкладку Projects в диалоговом окне

New.

2.В списке типов проектов выбрать MFC Active X Control Wizard.

3.В текстовом поле Project Name ввести Button, а в поле Location – путь к папке файла проекта (D:\Education).

4.Убедиться, что выбрана опция Create New Workspace и платформа Win32.

5.Щелкнуть ОК. Мастер AppWizard отобразит два диалоговых окна для выбора параметров, а затем сгенерирует файлы с исходным кодом для элемента Active X.

6.В диалоговом окне мастера щелкнуть на кнопке Finish, чтобы принять без изменения все стандартные установки. Выбирая параметры в диалоговых окнах мастера, можно создать несколько элементов Active X в одном проекте, что позволяет различными способами оптимизировать их и адаптировать к специальным задачам.

7.Щелкнуть ОК в диалоговом окне New Project Information

Рис.11. Диалоговое окно мастера AppWizard со стандартными установками

Добавление свойств, методов, событий элемента управления

Свойства – это атрибуты элемента управления, аналог переменных-членов класса, очень часто они реализуются с помощью методов get/set. Существуют стандартные (stock), характерные для большинства ActiveX элементов, свойства (Font (шрифт), BackColor (цвет

16

заднего фона) и др.) и пользовательские (custom), характерные для разрабатываемых элементов и определяемые разработчиком.

Метод – является аналогом функции элемента Active X, которую может вызвать приложение, использующее Active X.

Для добавления свойств, методов элемента Active X необходимо использовать инструмент ClassWizard (меню View). В рассматриваемом примере необходимо создать два свойства: select – определяет цвет, shape – определяет форму элемента управления; и четыре метода: getselect, getshape – считать значения соответствующих свойств, setselect, setshape – установить значения соответствующих свойств. Для этого в ClassWizard необходимо перейти на вкладку Automation, нажать кнопку AddProperty и в диалоговом окне (см. рис.12) для каждого свойства указать параметры:

-External Name – select; shape.

-Type – BOOL; BOOL.

-Выбрать флажок get/set methods.

Рис. 12. Диалоговое окно Add Property для определения свойства select

После определения свойств окно ClassWizard должно выглядеть как на рисунке 13. Кроме этого в классе CButtonCtrl необходимо объявить переменные, которые будут

связаны со свойствами Active X, в разделе public:

BOOL m_select;

BOOL m_shape;

17

Рис.13. Вкладка Automation после определения свойств.

Разработка программного кода для методов, событий

Здесь необходимо инициализировать переменные, связанные со свойствами элемента управления. А также написать программный код для методов. Для этого необходимо выбрать соответствующую функцию в ClassViewer, два раза щелкнуть левой кнопкой мыши и курсор автоматически будет установлен в тело этой функции. Для каждого метода ниже приведен код, который будет выполнен при вызове соответствующего метода.

BOOL ButtonCtrl::GetSelect()

{

return m_select;

}

BOOL ButtonCtrl::GetShape()

{

return m_shape;

}

void ButtonCtrl::SetSelect(bool bNewValue)

{

m_select=bNewValue;

InvalidateControl(); // стандартная функция MFC перерисовывающая объект.

}

void ButtonCtrl::SetShape(bool bNewValue)

{

m_shape=bNewValue;

InvalidateControl(); // стандартная функция MFC перерисовывающая объект.

}

При инициализации переменных необходимо в конструкторе класса CButtonCtrl указать:

m_select=1; m_shape=1;

18

Рис. 14. Диалоговое окно Message Maps при определении события.

В нашем примере будет создано одно событие – нажатие левой кнопки мыши на объекте, при котором будет меняться цвет объекта. Для создания обработчика событии следует открыть ClassWizard на вкладке Message Maps (см. рис. 14). В списках Class Name и Object Ids

выбрать имя класса СButtonCtrl, управляющего элементом, в списке Messages - идентификатор

WM_LBUTTONDOWN, щелкнуть кнопку AddFunction, после чего нажать кнопку Edit Code,

курсор автоматически установиться в тело функции отвечающей за данное событие (обработчик события), где необходимо добавить следующий код.

void CButtonCtrl::OnLButtonDown(UINT nFlags, CPoint point)

{

m_select = !m_select;

InvalidateControl(); // делает область отображения ActiveX не активной, после чего Windows перерисовывает ActiveX, автоматически вызывая функцию OnDraw.

}

Добавление программного кода, отвечающего за прорисовку элемента Active X

За отображение элемента Active X, за то, как он будет выглядеть, как его увидит пользователь, отвечает функция OnDraw(). При использовании AppWizard она автоматически генерируется в классе объекта Active X и по умолчанию рисует вписанный в прямоугольник эллипс. Эта же функция вызывается автоматически при каждой перерисовке объекта.

19

Ниже приведен код, который должна содержать эта функция для того, чтобы при рисовании она использовала текущие значения свойств.

void CButtonCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)

{

CPen pen;// объект типа «карандаш»

CBrush fBrush, bBrush; //объекты типа «кисть» pdc ->SaveDC();

pen.CreatePen (PS_SOLID, 1, RGB(0, 0, 0)); //цвет карандаша черный bBrush.CreateSolidBrush(TranslateColor(AmbientBackColor())); //задание цвета заднего фона fBrush.CreateSolidBrush(GetSelect()?RGB(255, 0, 0):RGB(0, 255, 0)); //задание переднего фона pdc->FillRect(rcBounds, &bBrush);//задание заднего фона в виде закрашенного прямоугольника

цветом заднего фона pdc->SelectObject(&pen);

pdc->SelectObject(&fBrush); выбор другой «кисти» if (m_shape) // задание формы объекты

pdc->Ellipse(& rcBounds);//рисование эллипса

else

pdc->Rectangle(& rcBounds);//рисование прямоугольника pdc->RestoreDC(-1);

}

Рис. 15. Диалоговое окно после запуска приложения

После этого необходимо построить проект, нажав кнопку Build панели инструментов, и запустить приложение (кнопка Run панели инструментов). После чего Visual C спросит с помощью какого приложения открывать Active X (см. рис. 15), здесь необходимо указать Active X Test Container. В результате получиться кнопка в виде красного эллипса, а при нажатии левой кнопки мыши на объекте он станет зеленым.

Создание окна свойств элемента управления

Согласно технологии создания элементов Active X должен содержать одну или несколько страниц свойств, с помощью которых пользователь может обратиться и при необходимости изменить свойства элемента управления. Каждая страница определяется как диалоговое окно и содержит набор элементов управления для определения значения свойств элемента Active X. Отображается такая страница как вкладка диалогового окна Properties, отображаемого редактором диалоговых окон. Страницы как и свойства могут быть

20

пользовательскими или стандартными. Пользовательские страницы свойств определяются разработчиком для каждого отдельного элемента. А стандартные – характерны для многих элементов управления (Caption, Font, BackColor), и содержаться в библиотеках Visual C++, их разработчик может подключить для изменения стандартных (stock) свойств.

Вначале проект элемента Active X содержит только одну заданную по умолчанию страницу свойств, определенную как ресурс диалогового окна (см. рис.16). Для изменения значения свойства Shape необходимо открыть ресурс диалогового окна IDD_PROPPAGE_BUTTON. Для изменения свойства shape необходимо отредактировать это диалоговое окно. Для этого ресурс диалогового окна IDD_PROPPAGE_BUTTON открывается в редакторе диалоговых окон Visual C++ . Сначала необходимо удалить надпись с сообщением TODO. Затем добавить check box, нажать правой кнопкой мыши по нему и в меню выбрать Properties, где для него задать идентификатор IDC_SHAPE и заголовок “Rectangle button”.

Рис. 16. Диалоговое окно свойств, разрабатываемого Active X.

Дальше необходимо связать новый флажок со свойством shape, выполнив следующие действия.

1.В диалоговом окне Class Wizard перейти на вкладку Member Variables.

2.В списках Class Name выбрать имя класса, управляющего стандартной страницей свойств CButtonPropPage. Идентификатор флажка IDC_SHAPE уже будет отображен в списке Control IDs, так как это единственный элемент управления, находящийся на странице свойств.

3.Щелкнуть на кнопке Add Variable…, чтобы открыть диалоговое окно Add Member Variable.

4.В текстовое поле Member Variable Name ввести m_shape. В списке Category выбрать значение Value, в списке Variable Type – значение BOOL и ввести shape в текстовое