Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 84

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 78 79 80 81 82 83 < 84 > 85 86 87 88 89 90 .. 173 >> Следующая

CMiniDrawApp *PApp = (CMiniDrawApp *)AfxGetApp (); CFigure *PFigure;
switch (PApp->m_CurrentTool) {
case ID_TOOLS_LINE:
ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (m_Point01d); PFigure = new CLine
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m_CurrentColor, PApp->m_CurrentThickness); break;
case ID_TOOLS_RECTANGLE :
ClientDC.Rectangle (m_PointOrigin.x, m_PointOrigin.y,
m_Point01d.x, m_Point01d.y); PFigure = new CRectangle
(m_PointOrigin.x, m_PointOrigin.у, point.x, point.y, PApp->m_CurrentColor, PApp->m_CurrentThickness) ; break;
case ID_TOOLS_RECTFILL:
ClientDC.Rectangle (m_PointOrigin.x, m_PointOrigin.y,
m_Point01d.x, m_Point01d.y); PFigure = new CRectFill
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m_CurrentColor) ; break;
case IDJTOOLS_RECTROUND: {
int SizeRound = (abs (m_Point01d.x - m_PointOrigin.x) +
abs (m_Point01d.y - m_PointOrigin.y)) / 6; ClientDC.RoundRect (m_PointOrigin.x, m_PointOrigin.y, m_Poirit01d.x, m_Point01d.y, SizeRound, SizeRound); PFigure = new CRectRound
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m__Cur r entColor, PApp->m_CurrentThickness) ; break;
case ID_TOOLS_RECTROUNDFILL'.
{
int SizeRound = (abs (m_Point01d.x - m_PointOrigin.x) +
abs (m_Point01d.y - m_PointOrigin.y)) / 6; ClientDC.RoundRect (m__PointOrigin.x, m_PointOrigin.y, ra_Point01d.x, m_Point01d.y, SizeRound, SizeRound); PFigure = new CRectRoundFill
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m_CurrentColor) ; break;
case ID_TOOLS_CIRCLE:
CiientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y,
m_Point01d.x, m_Point01d.y); PFigure = new CCircle
im_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m_CurrentColor, PApp->m CurrentThickness) ; break;
case ID_TOOLS_CIRCLEFILL:
CiientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y,
m_Point01d.x, m_Point01d.y); PFigure = new CCircleFill
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y, PApp->m_CurrentColor) ;
break;
ClientDC.SetR0P2 (R2_C0PYPEN); PFigure->Draw (SClientDC);
CMiniDrawDoc* PDoc = GetDocument() ; PDoc->AddFigure (PFigure);
PDoc->UpdateAllViews (this, 0, PFigure);
CScrollView::OnLButtonUp(nFlags, point);
void CMiniDrawView::OnlnitialUpdate()
j
CScrollView::OnlnitialUpdate();
// TODO: Здесь добавьте собственный код обработчика // и/или вызов базового класса
SIZE Size = {640, 480}; SetScrollSizes (ММ_ТЕХТ, Size);
)
void CMiniDrawView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Здесь добавьте собственный код обработчика
// и/или вызов базового класса
if (pHint != 0)
i
CRect InvalidRect = ((CLine *)pHint)->GetDimRect ();
CClientDC ClientDC (this) ;
OnPrepareDC (&ClientDC);
ClientDC.LPtoDP (SlnvalidRect) ;
InvalidateRect (&InvalidRect) ;
}
else
CScrollView::OnUpdate (pSender, lHint, pHint);
Итоги
В этой главе вы ознакомились с рисованием фигур с помощью функций класса сое. Кратко изложим основные принципы рассмотренной методики.
• Создайте объект контекста устройства. При рисовании с помощью функции OnDraw класса представления можно использовать объект контекста устройства, передаваемый в функцию. При рисовании с помощью функции другого типа можно создать экземпляр класса cclientDC, а при рисовании в окне
}
представления, поддерживающем прокрутку — передать объект в функцию CScrollView: :OnPrepareDC до его использования.
• Выберите перо для рисования линий и границ фигур с замкнутыми контурами и кисть для закрашивания внутренних областей фигур.
• Стандартное перо или кисть выбирается при вызове функции
CDC::SelectStockObject.
• Можно выбрать перо или кисть, создавая объект класса СРеп или Cbrush, и вызывая соответствующую функцию для инициализации пера или кисти, а затем вызвав функцию CDC:: SelectObject для выбора инструмента в объекте контекста устройства. Сохраните предыдущий выбранный объект, возвращенный функцией SelectObject.
• Используйте функции класса CDC (см. табл. 19.4) для установки любых желаемых атрибутов рисования. К ним относится режим отображения, определяющий единицы измерения и положительное направление значений координат, используемых для рисования.
• Нарисуйте изображение, вызывая функции класса CDC, предоставляющего функции для закрашивания отдельных пикселей, рисования прямых или кривых линий и таких фигур, как прямоугольники и эллипсы.
• Если вы создали и выбрали пользовательское перо или кисть, удалите их из объекта контекста устройства (вызвав функцию SelectObject), чтобы вернуться к предыдущему перу или кисти.
В следующей главе вы научитесь создавать рисунки с помощью растровых изображений и использовать битовые операции для быстрого перемещения или модификации блоков графических данных.
Глава 20
Использование
растровых изображений
и битовых операций_
• Создание растрового изображения
• Выполнение битовых операций
• Отображение значков
• Программа BitDemo
Растровое изображение (или точечный рисунок) Windows - это структура данных, сохраняющая точное представление рисунка в памяти или файле. Растровое изображение хранит цвет каждого пикселя, необходимого для генерации рисунка на таких устройствах, как экран дисплея или принтер. В этой главе вы узнаете, как создаются и отображаются растровые изображения и как использовать преимущества универсальных и эффективных функций битовых операций, предоставляемых для перемещения и модификации блоков графических данных. В конце главы будет создана программа BitDemo, демонстрирующая способы отображения растрового изображения в окне представления.
Предыдущая << 1 .. 78 79 80 81 82 83 < 84 > 85 86 87 88 89 90 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100