|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Закраска фигур
Для закраски фигур необходимо устанавливать и проверять флаг bFillFlag. Мы воспользуемся кистью BLACK_BRUSH для заполнения методом FloodFill() области, в которой находится начальная точка (то есть в которой была нажата кнопка мыши). Это делается так: Void CPainterView::OnLButtonUp(UINT nFlags, CPoint point) { DrawTo.x = point.x; DrawTo.y = point.y; CClientDC* pDC = new CClientDC(this); if(bLineFlag){ pDC->MoveTo(Anchor.x, Anchor.y); pDC->LineTo(DrawTo.x, DrawTo.y); } if(bRectangleFlag){ pDC->SelectStockObject(NULL_BRUSH); pDC->Rectangle(Anchor.x, Anchor.y, DrawTo.x, DrawTo.y); } if(bEllipseFlag){ pDC->SelectStockObject(NULL_BRUSH); pDC->Ellipse(Anchor.x, Anchor.y, DrawTo.x, DrawTo.y); } if(bFillFlag){ pDC->SelectStockObject(BLACK_BRUSH); pDC->FloodFill(Anchor.x, Anchor.y, RGB(0, 0, 0)); } delete pDC; CView::OnLButtonUp(nFlags, point); } Итак, программа painter умеет рисовать линии, прямоугольники, эллипсы и заполненные фигуры. Следующим шагом должно стать рисование фигур произвольной формы.
Рисование фигур произвольной формы
Рисовать фигуры произвольной формы несложно — мы отслеживаем перемещение мыши, получаем последовательность точек и соединяем их линиями. Количество сообщений о перемещении мыши в секунду ограничено, поэтому мы не будем получать сообщения при каждом смещении мыши на один пиксель. Если мы будем просто закрашивать каждый текущий пиксель, то получим на экране цепочку разрозненных точек, а не фигуру.
Рисование фигур произвольной формы выглядит так: при нажатии кнопки мыши фиксируется положение начальной точки. Когда мышь перемещается в новую точку, мы рисуем линию от начальной точки к текущей и затем делаем текущую точку начальной для следующего перемещения мыши. Для начала воспользуйтесь ClassWizard, чтобы добавить обработчик перемещений мыши OnMouseMove(), и подготовьте в нем контекст устройства. Затем необходимо убедиться, что в текущем режиме мы действительно должны рисовать фигуры произвольной формы — для этого следует проверить флаг bDrawFlag. Кроме того, рисование должно происходить только при нажатой левой кнопке мыши (то есть при перетаскивании указателя мыши с нажатой кнопкой), поэтому мы проверяем, нажата ли левая кнопка, сравнивая параметр nFlags метода OnMouseMove() с константой Visual С++ MK_LBUTTON:
Void CPainterView::OnMouseMove(UINT nFlags, CPoint point) { CClientDC* pDC = new CClientDC(this); if((nFlags && MK_LBUTTON) && bDrawFlag){ …………………………………………. } delete pDC; CView::OnMouseMove(nFlags, point); } Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |