Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

6.4.Класс cdrwView

Класс CDRWView сгенерирован мастером и специфичен для приложения DRW. (Мастер строит имена классов на основании имени проекта, заданного Вами в его первом диалоговом окне.) Класс CDRWView находится внизу длинной цепочки наследования классов библиотеки MFC, как Вы могли видеть ранее в окне Browse. В классе собраны функции-члены и переменные-члены со всей цепочки. Информацию об этих классах можно получить Microsoft Foundation Class Reference (в интерактивном режиме или в отпечатанной версии), но обязательно просматривайте описания всех базовых классов, так как описания наследуемых функций-членов обычно не повторяются для производных классов.

Наиболее важные базовые классы CDRWView – CWnd и CView. CWnd придает CDRWView свойства окна, a CView обеспечивает связь с остальными частями каркаса приложения, в частности, с документом и рамочным окном.

6.5.Рисование внутри окна представления: Windows gdi

Теперь Вы готовы к тому, чтобы написать код, который будет рисовать в окне представления. Вы внесете несколько изменений непосредственно в исходный текст DRW.

Функция-член OnDraw

Конкретнее, Вам понадобится наполнить реализацию OnDraw в DRWView.cpp. OnDraw – это виртуальная функция-член класса CView, которую каркас приложения вызывает всякий раз, когда необходимо перерисовать окно представления. Перерисовка требуется, когда пользователь изменил размеры окна или открыл ранее невидимые его части, либо если приложение изменило содержимое окна. В первых двух случаях OnDraw() вызывается каркасом приложения автоматически; однако если данные окна изменены функцией внутри вашей программы, эта функция должна уведомить Windows об изменениях, вызвав унаследованную классом «вид» функцию-член Invalidate (или InvalidateRect). Код Invalidate впоследствии вызовет OnDraw.

Хотя внутри окна можно рисовать всегда, рекомендуется позволять ему накапливать изменения и обрабатывать их все вместе при вызове функции OnDraw. В этом случае программа сможет реагировать как на события, сгенерированные ею самой, так и на события, сгенерированные Windows, например, изменение размеров окна.

Контекст устройства в Windows

Windows не разрешает прямой доступ к аппаратуре дисплея, а взаимодействует с ней посредством абстракции под названием «контекст устройства» (device context), который связан с окном. В библиотеке MFC контекст устройства представлен в виде объекта класса C++ с именем CDC, который передается OnDraw как параметр (посредством указателя). Имея указатель на CDC, Вы можете воспользоваться множеством функций этого класса для рисования.

Добавление кода рисования в программу drw

Теперь напишем код, рисующий внутри окна представления текст и круг. Убедитесь, что в Visual C++ открыт проект DRW. Чтобы найти функцию, можно воспользоваться ClassView в окне Workspace (дважды щелкните OnDraw) либо открыть исходный файл DRWView.cpp из FileView и отыскать функцию в тексте.

Шаг 5. Отредактируйте функцию OnDraw в DRWView.cpp.

Найдите в файле DRWView.cpp функцию OnDraw, сгенерированную мастером AppWizard.

void CDRWView::OnDraw(CDC* pDC)

{

CDRWDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// Доделать: добавьте код отображения своих данных.

}

Отредактируйте ее код:

void CDRWView::OnDraw(CDC* pDC)

{

pDC->TextOut(0,0,"Слава ХАИ!"); /*вывод шрифтом по умолчанию

в левом верхнем углу*/

pDC->SelectStockObject(GRAY_BRUSH); /*Выбор кисти для

заполнения круга*/

pDC->Ellipse(CRect(0,20,100,120));/*Нарисовать окружность диаметром

100 и закрасить кистью GRAY_BRUSH*/

}

Вызов GetDocument() можно спокойно удалить, поскольку пока мы не работаем с документами. Функции TextOut, SelectStockObject и Ellipse — члены класса контекста устройства CDC каркаса приложения. Функция Ellipse рисует круг, если длина ограничивающего прямоугольника равна его ширине.

Для работы с прямоугольниками библиотека MFC предоставляет удобный класс CRect. Временный объект CRect — аргумент, ограничивающий прямоугольник для функции рисования эллипса. Класс CRect будет использоваться в примерах довольно часто.

Шаг 6. Перекомпилируйте и протестируйте приложение DRW.

Выберите из меню Project пункт Build и, если нет ошибок компиляции, снова запустите программу. Теперь у Вас есть программа, работа которой сразу же видна!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]