Для рисования выберите себе минимум 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
Дата: 2019-07-30, просмотров: 252.