Типов проектов много, рекомендуется использовать проект со своей оконной функцией, в этом случае быстродействие максимальное.
Универсальные
1.Изображения пикселя и получения его цвета.
СOLORRF SetPixel (HDC hDC,
int x, y, //координаты
COLORREF color); //цвет
Все фигуры рисует PEN, по умолчанию толщина линии 1 пиксель.
BOOL LineTo(HDC hDC, int x, int y);
Линия ведется от точки с координатами (х,у) к текущей точке контекста (0,0).
Возвращает: 0 – False, если не может рисовать линию
1 - True
Установка текущей точки контекста.
BOOL MoveToEx (HDC hDC, int x, int y, LPPoint lpOldxy);
Определение текущей точки.
BOOL GetCurrenPosition(HDC hDC, LPPOINT pxycurrent);
Изображение кривых
Изображение прямоугольников
BOOL Rectangle (HDC hDC, int x1, int y1, int x2, int y2);
Прямоугольник со скругленными углами.
BOOL RoundRectangle (HDC hDC, int x1, int y1, int x2, int y2, int Dx, int Dy);
Эллипс.
BOOL Ellipse(HDC hDC, int x1, int y1, int x2, int y2);
Изображение дуги эллипса.
BOOL Arc (HDC hDC, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
Замкнутая дуга
Chord (hDC, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
Эллиптический сектор
Pie (hDC, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
Фигуры соединения большого числа точек.
Кусочно-линейная аппроксимация
Любая кривая - последовательность прямых.
POINT mT[100];
mT[0].x = 1;
mT[0].y = 1;
BOOL Polyline (HDC hDC, POINT mt, int N)
; // N – число течек, которые нужно соединить
PolylineTo(hDC,mT,Nz); //Рисование не сточки с координатами(х0,у0), а с текущей точки поля.
Соединение точек с замыканием и заливкой.
Bool Polygon(HDC hDC, POINT mT, int N);
Рисование нескольких кривых
DWORD mNT[k];
mNT= {3,4,2};
BOOL PolyPolyline (HDC hDC, POINT mt, Dword mNT ,Dword k)- Dword k количество кривых;
Создание нескольких замкнутых.
Bool Polygon(HDC hDC, POINT mt, Dword mNT ,Dword k)
Если линии пересекаются.
SetPolyFillMode(hDC, int ARTERNATE) – заливается полностью.
Или SetPolyFillMode(hDC, int WINDING) – то так
Кривая бизье - апрокссимация параболами второго порядка, можна сделать плавный переход.
Технология изображения этих кривых лежит в основе построения шейдеров в CorelDraw.
Основная идея: мы говорим где рассположена точка и крутизну будущей параболы (tg) и задаем ее прямой линией.
PolyBezier(HDC LDC, const Point mB, DWORD N);
PolyBezierTo(HDC LDC, const Point mB, DWORD N);
!!! Если линии кривой Bezier пересекаются, то заливка автоматически не выполняется.
Дополнительные возможности рисования прямоугольников не пременяя BRUSH и PEN:
RECT r, *pr
{ r.left; //x1
r.top; //y1
r.right; //x2
r.bottom; //y2
}
Можно рисовать произвольные цвета не меняя контекста.
Для изображения используется своя BRUSH
HBRUSH hBrush = Create SclidBrush (RGB(R,G,B));
от 0-255 для каждого,
т.е. 16 млн. цветов
Заливка области без контура.
int FillRect(HDC hDC, LPRECT &r, HBRUSH hBrush)
Инверсия цвета внутри заданного прямоугольника
IuVertRect (HDC hDC, LPRECT &r);
Изображение прямоугольника с контуром заданного цвета по имени цвета в Pent в контексте :
FrameRect(HDC hDC, LPRECT &r, HBRUSH hBrush);
Особенности:
Смещение прямоугольников.
OffSetRect(&r, Dx, Dy);
Изменение полей в Rect путем изменения его значений в структуре
IntLateRect(&r, Dx, Dy);
Нужно найти координаты прямоугольника, который их полностью охватывает
Unicn Rect (&R, &r1, &r2);
Нахождение прямоугольника
InterSectRect(&R, &r1, &r2);