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

Закраска фигур

Читайте также:
  1. Большой фигурный вальс
  2. Введение в конфигурацию интерфейсов.
  3. Вычисление площадей плоских фигур
  4. Вычисление площади плоской фигуры
  5. Гамма-трансфигурация
  6. Гривна с двумя группами фигур львов и завершениями в форме передних частей оленей, Толстая Могила.
  7. Информатизации 3 компьютера необходимой конфигурации.
  8. Конспект занятия по математике для средней группы, тема «Путешествие в страну геометрических фигур»
  9. Конфетные фигурки
  10. Конфигурация 1С Анализ данных по продажам
  11. Конфигурация DHCP сервера на маршрутизаторах фирмы Cisco

 

Для закраски фигур необходимо устанавливать и проверять флаг 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);

}


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)