Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Рисование внутри окна представления: 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 и, если нет ошибок компиляции, снова запустите программу. Теперь у Вас есть программа, работа которой сразу же видна!

 

Первое знакомство с редакторами ресурсов

Теперь, когда у нас есть готовая программа, самое время кратко познакомиться с редакторами ресурсов. Хотя файл ресурсов приложения DRW.rc — текстовый файл, изменять его с помощью текстового редактора — не слишком удачная идея. Для этого существуют редакторы ресурсов.

Содержимое файла DRW.rc

Файл ресурсов во многом определяет внешний вид приложения DRW. Он содержит (или указывает на) перечисленные ниже ресурсы Windows.

 

Ресурс Описание
Accelerator («Быстрая клавиша») Задает клавиши, нажатие на которые эквивалентно выбору тем меню и/или кнопок панели управления
Dialog (Диалоговое окно) Определяет формат и содержимое диалоговых окон. В DRW имеется только диалоговое окно «About» («О программе»)
Icon (Значок) Значки (версии 1бх16 точек и 32х32 точки), аналогичные значкам приложений, которые отображаются Проводником Windows и в диалоговом окне About приложения. В качестве значка приложения DRW использует эмблему MFC
Menu (Меню) Меню верхнего уровня приложения и связанные с ним раскрывающиеся меню
String Table (Таблица строк) Строки, не являющиеся частью исходного С++ кода
ToolBar (Панель) Ряд кнопок непосредственно под меню
Version (Версия) Описание программы, номер ее версии, язык и т. д.

 

Кроме перечисленных ресурсов, DRW.гс содержит директивы препроцессора:

#include "afxres.h"

#include "afxres.rc"

 

подключающие некоторые ресурсы библиотеки MFC, общие для всех приложений. Сюда входят строки, графические кнопки и элементы, необходимые для печати и OLE.

 

Примечание. Если Вы используете MFC в виде совместно используемой DLL, то общие ресурсы хранятся внутри DLL MFC.

 

Файл DRW.гс также содержит директиву препроцессора

#include "resource.h"

 

Эта директива вводит в приложение три константы #define IDR_MAINFRAME (идентифицирует меню, значок, список строк и таблицу «быстрых клавиш»), IDR_DRWTYPE (идентифицирует значок документа по умолчанию, который в этой программе не используется) и IDD_ABOUTBOX (идентификатор диалогового окна About). Этот же файл resource.h неявно включается исходными файлами приложения. Если с помощью редактора ресурсов Вы добавите другие константы (символы), то их определения, в конечном счете, появятся в resource.h. Будьте внимательны, редактируя этот файл в текстовом редакторе, так как внесенные Вами изменения могут быть удалены, когда Вы в следующий раз воспользуетесь редактором ресурсов.










Последнее изменение этой страницы: 2018-04-12; просмотров: 418.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...