Шаг 4. Выбор объектов для рисования.



Для рисования выберите себе минимум 3 объекта из доступных в классе CDC и не использованных в приведенной выше функции OnDraw(). Перечень член-функций класса CDC можно (и нужно) найти в MSDN.

Шаг 5. Открытие и чтение файла.

Добавьте в функцию OnFileOpen() открытие файла и чтение из него данных. Вы можете использовать простой текстовый файл (как в работе «Обработка текстового файла») или программно (с помощью этой же или другой программы) создать двоичный файл и читать данные из него или, в конце концов, использовать ini-файл (см. подраздел конспекта «Использование ini-файла»), что полезно с точки зрения не такой уж и далекой перспективы выполнения ДЗ.

Шаг 6. Описание и инициализация член-данных в классе.

Где разместить прочитанные данные, т.е. где надо описать соответствующие переменные, чтобы они были видимы не только в функции OnFileOpen(), но и в функции OnDraw()? Надо сделать их член-данными класса CDRWView, для чего нужно описать их в заголовочном файле DRWView.h, а именно в описании класса CDRWView. При описании данных постарайтесь не модифицировать уже имеющиеся в файле описания, с таким трудом сгенерированные мастерами MVS. Описания своих данных разместите после строк:

class CDRWView : public CView

{

protected: // create from serialization only

  CDRWView();

  DECLARE_DYNCREATE(CDRWView)

//////////////здесь должны быть описания ваших данных//////////////

 

 

Рис. 2. Окно добавления функции обработчика команды меню FileèOpen

 

Начальные значения для собственных член-данных следует задавать в конструкторе, который определен в файле реализации DRWView.cpp и выглядит так:

CDRWView::CDRWView()

{

  // TODO: add construction code here

}

 

Присваивание данным начальных значений выполняется обычным образом, например:

CDRWView::CDRWView()

{

  MyVar=123;

}

 

Удобнее добавлять в класс член-данные с помощью мастера ИС. Для этого в окне решений выберите вкладку ClassView (если Вы не видите эту вкладку – перекреститесь, если вы православный, и вызовите ее с помощью команды ViewèClass View), выделите с помощью мыши класс CDRWView, вызовите с помощью ПКМ контекстное меню и выберите в нем команду AddèAdd variable. В появившемся диалоговом окне задайте имя член-данного, выберите тип и спецификатор доступа (public, protected, private) и завершите диалог натискиванием кнопки Finish. Мастер добавит член-данное в заголовочный файл (.h) и добавит код инициализации в конструктор, например:

CDRWView::CDRWView()

:MyVar(0)

{

  // TODO: add construction code here

}

Если добавить еще одно член-данное, то код конструктора станет таким:

CDRWView::CDRWView()

:MyVar(0)

, MyVar2(0)

{

  // TODO: add construction code here

}

 

Само собой разумеется, что Вы можете изменить начальные значения член-данных, предложенные конструктором.

Шаг 7. Рисование фигур.

Код рисования проще всего разместить в функции CDRWView::OnDraw(), которая вызывается автоматически (это так называемая функция обратного вызова – callback function) всякий раз, когда изображение в окне должно быть обновлено, а именно при свертывании и развертывании окна, при изменении его размеров, при перекрытии окна другим окном и т.д. Если мы поместим код рисования фигур, данные для которых читаются из файла, в функцию OnDraw(), то возникнет такая проблема: функция OnDraw() вызывается каркасом приложения уже при первом отображении содержимого окна, т.е. еще до того, как мы прочтем файл и собственно получим данные. Как быть? Можно поступить так: ввести специальную переменную (член-данное) булевского типа, например, bool FirstRun, в конструкторе присвоить ей значение true и проверять это значение в функции OnDraw(). После того как будут прочитаны данные из файла, этой переменной нужно присвоить значение false и «заставить выполниться» функцию OnDraw(). Функцию OnDraw() вызывают на выполнение не явно, а косвенным образом, с помощью функции Invalidate(). С учетом сказанного функция CDRWView::OnFileOpen() может быть реализована так:

CDRWView::OnFileOpen()

{

  // ввод имени файла

  // чтение данных из файла

  Invalidate();

}

 

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

Варианты заданий

№ п/п Реализуемые функции
1,12 Draw3dRect, Arc
2,13 DrawEdge, ArcTo
3,13 DrawFrameControl, PolyBezierTo
4,14 DrawIcon (используйте функцию LoadIcon для загрузки одной из стандартных иконок), PolyDraw
5,15 FrameRect, Polyline
6,16 InvertRect (интересно наложить частично прямоугольник, указанный в качестве параметра функции InvertRect, на другую фигуру), ExtTextOut
7,17 Chord, PolylineTo
8,18 Pie, PolyPolyline
9,19 PolyPolygon, DrawText
10,20 RoundRect, PolyBezier
11,21 AngleArc, DrawTextEx

С помощью Draw3dRect, приложив совсем немного сообразительности, можно изобразить фигуру, представленную на рис.3.

 

Рисунок 3. Творческий подход к Draw3dRect


Дата добавления: 2018-02-18; просмотров: 281; ЗАКАЗАТЬ РАБОТУ