Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
10.12.2013
Размер:
324.61 Кб
Скачать

11. Перейдем к файлу dCclass.Cpp и определим функции- члены класса

Когда мы будем набирать этот файл, заметим, что набирать заголовки функций и скобки блока тела функции не нужно, так они будут сгенерированны средствами Class Wizard - нам нужно будет только набрать исходный код внутри этих скобок.

12. Откомпилируем класс и убедимся, что ошибки отсутствуют.

13. Добавим абстрактный базовый класс геометрических фигур с именем figures и два порожденных от него класса circle и rectangle.

Как описано выше создаем класс figures, описанный в файле декларации класса figures.h и файл кода функций класса figures.cpp.

14.Добавим в класс figures чистую виртуальную функцию draw() с типом возвращаемого значения void. Для этого можно воспользоваться средствами Class Wizard. Как мы это уже делали для класса DCclass, вызовем плавающее меню, щелкнув на имени класса figures, выберем из него пункт Add Member Function. В появившемся диалоге введем тип возвращаемого значения void, и декларацию функции draw(HDC hdc) =0, отметим тип функции как virtual.

15.Добавим к этому классу два порожденных от него класса circle и rectangle.

1

Имя для файла заголовка

Имя файла с исходными кодами

6.
Для добавления класса circle воспользуемся средствами Class Wizard, вызовем средство генерации классов, как описано выше. Вводим имя класса circle, в поле File Name вводим имя файла декларации figures.h, файла исходных кодов figures.cpp(для этого необходимо нажать на change, появится следующий диалог).

В строках Header File и Implementation File введите имена файлов, где вы хотите разместить заголовки классов и их программную реализацию ( в данном случае figures.h и figures.cpp).

Введите в разделе Base Class(es) имя базового класса figures и тип наследования для класса circle- public. Class Wizard сгенерирует в заданных файлах декларацию данного класса( конструктор + деструктор) и исходный код конструктора и деструктора(пустые функции).

17. Переопределим в данном классе чистую виртуальную функцию из базового класса с именем draw(HDC hdc). Это можно сделать вручную или с помощью Class Wizard, не забудьте только про правила переопределения и декларации виртуальных функций.

Как мы это уже делали для класса DCclass, вызовем плавающее меню, щелкнув на имени класса circle, выберем из него пункт Add Member Function. В появившемся диалоге введем тип возвращаемого значения void, и декларацию функции draw(HDC hdc) , отметим тип функции как

virtual. Данная функция будет рисовать в контексте устройства hdc круг с центром в точке (100,100) и заданным в переменной int circlre::usedradius радиусом.

Добавим также функцию int circle::setradius(const int newradius) которая будет возвращать старое значение радиуса и устанавливать новое заданное в newradius.

Добавим также в класс переменную int circlre::usedradius в котором будем хранить используемый радиус круга.

18.Добавим в проект новый класс с именем rectangle порожденный от класса figures, в котором переопределим функцию draw так, чтобы она отображала прямоугольник с координатой левого верхнего угла в точке (100,100) и заданной шириной и высотой. В данный класс добавим переменные int rectangle::usedwidth и int rectanlge::usedheight в которых будут хранится ширина и высота прямоугольника и функцию класса void setrectsize(const int rectwidth,const int rectheight) которая будет устанавливать ширину и высоту прямоугольника.

Пусть этот класс будет декларироваться в файле figures.h, а его код будет размещаться в файле figures.cpp

19.Перейдите на файл figures.cpp и определите в нем методы классов

20.Запишем главную часть программы- файл test.cpp содержащий текст функции WinMain и функцию обработчик сообщений Windows с именем WndProc.

Стратегия обработки сообщений в оконной функции следующая:

Обработчик сообщения WM_KEYDOWN (нажали клавишу) устанавливает значение переменной pressedkey, в зависимости от кода нажатой клавиши. Код нажатой клавиши передается в оконную функцию через параметр wParam. После установки значение переменной pressedkey, необходимо вызвать API функцию InvalidateRect для того, чтобы было сгенеровано сообщение WM_PAINT.

Обработчик сообщения WM_PAINT создает объект класса DCclass, в котором определяется контекст устройства и объекты классов circle и rectangle. Затем в зависимости от значения переменной pressedkey вызывается виртуальная функция draw, которая будет рисовать ту или иную фигуру.

Если не нажаты ни одна из названных клавиш, то выводится текст “Press 1 or 2” . Вывод текста выполняется API функцией TextOut.

21.Откомпилируем и выполним программу.

Соседние файлы в папке Лабы_длстудентов