Рефераты. Визуализация контактных преобразований в среде Visual C++ 6 p> Для инициализации пера вызываем функцию CreatePen класса СРеn.

BOOL CreatePen (int nPenStyle, int nWidth, COLORREF crColor) ;

Параметр nPenStyle описывает стиль линии, нарисованной пером.
Присваивание стиля ps_null создает перо, совпадающее со стандартным пером null_pen. Стиль ps_insideframe выбирает перо для рисования границы вокруг фигуры с замкнутым контуром, расположенной внутри ограничивающего прямоугольника. Ограничивающие прямоугольники и эффекты стиля ps_insideframe описаны далее. Стили ps_dash, ps_dot, ps_dashdot и PS dashdotdot используются, если ширина пера равна 1 пикселю. Если ширина пера превышает этот размер, то перечисленные стили генерируют сплошные линии.

Параметр nWidth описывает ширину линии в логических единицах, используемых в текущем режиме отображения. Если ширина пера — 0, то ширина линии — 1 пиксель, независимо от текущего режима отображения. Такая ширина генерируется и стандартным пером, и заданным по умолчанию.

Параметр crColor задает цветовой код линии. Легче всего описать цвет, используя макрос Win32 rgb.

ColorRef RGB (bRed, bGreen, bBlue)

Параметры bRed, bGreen и bBlue показывают относительную интенсивность красного, зеленого и синего цветов. Каждому параметру можно присвоить значение в диапазоне от 0 до 255. В табл. 19.3 приведены значения, которые передаются в макрос RGB для описания 16 чистых цветов, доступных в стандартном графическом режиме VGA.

Обратим внимание: перу присваивается только чистый цвет. Чистый цвет - это цвет, генерируемый аппаратными средствами для видеоотображения, который не требуется имитировать смешиванием различных цветов (известным как имитация полутонов (dithering)). Если присвоить перу цветовой код, который не относится НИ к одному из чистых цветов, то линия будет нарисована с использованием ближайшего чистого цвета. Исключение из этого правила: если перо имеет стиль ps_insideframe и ширину более 1 пикселя, то Windows использует полутона (если присвоенный цвет не является чистым).
Примечание
Класс СPеn предоставляет более совершенную функцию инициализации пера, называемую ExtCreatePen. В среде Windows NT эта функция задает способ изменения и объединения широких перьев, что позволяет создавать перья с пользовательским стилем. Однако Windows 95 не поддерживает большинство из этих средств. Заметим также, что вместо вызова функции CPen: :CreatePen, объект пера можно инициализировать при его создании, передавая конструктору СPеn соответствующие параметры. Информация о конструкторах СРеn и ExtCreatePen - в следующих разделах справочной системы: Visual C++ Documentation, Reference, Microsoft Foundation Class
Library and Templates, Microsoft Foundation Class Library, Class Library
Reference, СРеп.

Кисть можно инициализировать так, чтобы она окрашивала однородным цветом внутреннюю область фигур, вызывая функцию CreateSolidBrush класса CBrush с параметром crColor, описывающим цвет заливки. Можно задать любой цвет. Если присвоенный цвет не является чистым, то Windows генерирует псевдополутоновый цвет (полученный имитацией полутонов).

BOOL CreateSolidBrush (COLORREF crColor);

Кроме того, для заливки внутренней области фигур можно инициализировать кисть, вызвав функцию CreateHatchBrush класса Cbrush.

BOOL CreateHatchBrush (int nindex, COLORREF crColor);

Параметр nIndex задает узор. Параметр crColor описывает цвет линий штриховки.

Функция CreatePatternBrush класса CBrush вызывает кисть для заполнения фигуры заданным узором.

BOOL CreatePatternBrush (CBitmap* pBitmap);

Параметр pBitmap является указателем на объект растрового изображения.
Если фигура рисуется с помощью кисти, то ее внутренняя область полностью заполняется копиями растрового изображения, размещаемыми одна возле другой.
Объект растрового изображения создается и инициализируется. Задаём размер растрового изображения равным 8х8 пикселей.

Если растровое изображение монохромное, то Windows использует текущие цвета текста и фона.

Примечание
Объект кисть (как и перо) можно инициализировать при создании, передавая конструктору CBrush соответствующие параметры. Информация об этом - в следующих разделах справочной системы: Visual C++ Documentation,
Reference, Microsoft Foundation Class Library and Templates, Microsoft
Foundation Class Library, Class Library Reference, CBrush.

Как только перо или кисть инициализированы, их выбирают в объекте контекста устройства с помощью функции SelectObject класса cdc. Для выбора пера вызовите функцию SelectObject,

CPen* SelectObject (CPen* рРеn) ;

где рРеn — указатель на объект-перо. Функция SelectObject возвращает указатель на предыдущий объект-перо, выбранный в объекте контекста устройства. Если перо ранее не выбиралось, это будет временный объект пера, заданного по умолчанию. Для выбора кисти вызывается функция SelectObject.

CBrush* SelectObject (CBrush* pBrush);

где pBrush — указатель на объект-кисть. Функция SelectObject возвращает указатель на ранее выбранную кисть. Если она ранее не выбиралась, то это будет временный объект для заданной по умолчанию кисти.

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

Перо или кисть необходимо удалить из объекта контекста устройства, чтобы объект контекста устройства не хранил некорректный дескриптор после удаления объекта. При инициализации пера или кисти Windows добавляет дескриптор, сохраняемый внутри объекта. При выборе пера или кисти объект контекста устройства также сохраняет этот дескриптор. Когда объекты выходят за пределы области видимости или удаляются, деструктор объекта уничтожает дескриптор. Однако этот шаг не нужно выполнять, если объект контекста устройства удаляется до удаления объекта пера или кисти.

В моей программе будут рисоваться два эллипса, первый по формуле x2 y2
( --- --- =1 ; a2 b2 а второй, по формуле

x=a cos t
( y=b sin t

Вот функция, которая рисует оба эллипса: void CEllipseView::OnDraw(CDC* pDC)
{

CEllipseDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc); float x, y, t, PI = 3.1415926; for (x = -pDoc->A; x < pDoc->A; x+=0.005)

{ y = sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc->A))*(pDoc->B*pDoc->B))); pDC->SetPixel(x*5+pDoc->A*5+10, y*5+pDoc->B*5+10, RGB(0xFF,0,0)); y = -sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc->A))*(pDoc->B*pDoc->B))); pDC->SetPixel(x*5+pDoc->A*5+10, y*5+pDoc->B*5+10, RGB(0xFF,0,0));

} for (t = -PI; t < PI; t+=0.005)

{ x = pDoc->Ac * cos(t); y = pDoc->Bc * sin(t); pDC->SetPixel(x*5+MAX(pDoc->A,pDoc->Ac)*15+20, y*5+MAX(pDoc->B,pDoc->Bc)*5+10, RGB(0,0x20,0x80));

}

Для передачи параметров в функцию рисования я создал два диалоговых окна, одно для первой формулы (первого эллипса), другое – для второй формулы (второго эллипса). При нажатии на иконки эллипсов появляются эти диалоговые окна и предлагается ввести соответствующие параметры формулы эллипса. Диалоговые окна вызываются в файле EllipseDoc.Cpp, вот функции вызова обоих диалоговых окон: void CEllipseDoc::OnNewEllipseProperties()
{

CEditEllipseProperties dlg; dlg.m_A = A; dlg.m_B = B; dlg.DoModal();

A = dlg.m_A;

B = dlg.m_B;

UpdateAllViews(NULL);
}

void CEllipseDoc::OnEditEllipseProperties2()
{

CEditEllipseProperties dlg; dlg.m_A = Ac; dlg.m_B = Bc; dlg.DoModal();

Ac = dlg.m_A;

Bc = dlg.m_B;

UpdateAllViews(NULL);
}

Глава 3.Печать и предварительный просмотр

1)Основы печати и предварительный просмотр
2)Усовершенствованная печать

В этой главе я объясню, как выполняется печать текстов и графических изображений, а также предварительный просмотр внешнего вида документа перед печатью. А также, как выполняются стандартные команды Print..., Print
Preview и Print Setup из меню File. Так как в Windows применяется модель вывода данных, не зависящая от устройств, для отображения текста и графики на печатной странице можно использовать уже известные вам способы.
Рассмотрим особые способы печати - выбор и установку принтера, разбиение документа на страницы и другие действия, необходимые для работы принтером.

Прежде всего рассмотрим как обеспечивается поддержка печати, позволяющая программе печатать или предварительно просматривать одну страницу. Показаны более совершенные способы печати или просмотра страниц документа, который не помещается на одну страницу. Примеры добавления средств поддержки печати и предварительного просмотра приведены в программе .

Основы печати и предварительный просмотр

При генерации новой программы с использованием мастера AppWizard, в нее можно включить основные средства поддержки печати и предварительного просмотра, установив опцию Printing And Print Preview в диалоговом окне
(Step 4) AppWizard , в следствие чего команды Print..., Print Preview и
Print Setup... добавляются в меню программы File. При реализации мастером
AppWizard команда Print... печатает ту часть документа, которая помещается на одной странице. Оставшаяся часть документа игнорируется.

Подобным образом команда Print Preview отображает распечатку, появляющуюся на одной странице документа. Как вы увидите, команды Print... и Print Preview вызывают функцию OnDraw, чтобы сгенерировать реально выводимую текстовую или графическую информацию. Команда Print Setup... отображает обычное диалоговое окно Print Setup, позволяющее выбрать тип принтера и задать его установки.

В этом разделе в мою программу Ellipse добавлены все средства печати, позволяющее печатать так же, как и при выборе опции Printing And Print
Preview в первом варианте программы, сгенерированном мастером AppWizard. В новую версию моей программы Ellipse включены все средства, которые вошли в программу.

Модификация ресурсов

Чтобы отобразить ресурсы программы, перед началом модификации ресурсов откроем проект Ellipse и вкладку Resource View в окне Workspace. Затем откроем меню idr_mainframe в конструкторе меню. Непосредственно под существующей командой Save As... в меню File добавляем разделитель и команды Print..., Print Preview и Print Setup....

Откроем в редакторе акселераторов таблицу idr_main frame, чтобы задать клавиатурный акселератор для команды Print... (Ctrl+P). Добавим акселератор с идентификатором id_file_print и комбинацией клавиш Ctrl+P.

Теперь необходимо включить в файл определения ресурсов Ellipse некоторые дополнительные предопределенные ресурсы. Для этого выбираем команду
Resource Includes... в меню View Developer Studio. В диалоговом окне
Resource Includes добавляем конце текста в поле Compile-Time Directives следующую строку:

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.