Developer от Бога

DV

четверг, 6 июля 2017 г.

WinAPI. HDC .

Есть четыре типа контекста устройств:
1. Display Device Contexts - Позволяет рисовать в видео дисплее.
2. Printer - Операции рисования через принтер.
3. Memory - Для рисования в растровом изображении.
4. Information - Извлечение данных с устройств ПК.
При рисовании по окну программы, используется первый тип. Получить контекст дисплея можно с помощью следующую функцию:

HDC GetDC (
HWND hWnd
);



Данная функция возвращает переменную типа HDC, следовательно ее нужно создать для сохранения дескриптора устройства, через которое будет происходить рисование в окне. Функция принимает всего один аргумент типа HWND, в котором хранится дескриптор выбранного окна для рисования.
Следующий шаг это создания параметров кисти для рисования:


HPEN CreatePen(
int fnPenStyle,
int nWidth,
COLORREF crColor
); 



Первый параметр fnPenStyle - это стиль рисования линии, второй nWidth - толщина толщина линии, третий crColor - цвет линии ( С помощью функции RGB(int,int,int) цвет легко регулировать смешивая три основных цвета).
Чтоб применить созданную кисть к рисованию линий, нужно привязать ее к контексту устройства HDC, если этого не сделать будет применена кисть по умолчанию :


HGDIOBJ SelectObject(
HDC hdc,
HGDIOBJ hgdiobj
);  



Теперь когда все подготовлено можно задействовать любые функции которые рисуют все наборы линий и фигур из них. Для этого нужно выбрать первую точку отсчета функцией :


BOOL MoveToEx(
HDC hdc,
int X,
int Y,
LPPOINT lpPoint
); 



Она принимает четыре параметра, первые три это контекст устройства HDC, два других координаты (x,y).
После создания главной точки можно рисовать любые фигуры, например линию функцией с параметрами HDC и двумя конечными точками линии:

BOOL LineTo(
HDC hdc,
int nXEnd,
int nYEnd
);  



В целом, чтоб нарисовать простую линию, достаточно разместить эти строчки в любом месте откуда видна переменная hwnd, в которой хранится дескриптор окна:


HDC hDC = GetDC (hwnd);

HPEN hPen = CreatePen (PS_SOLID, 3, RGB(255, 0, 0));

SelectObject (hDC, hPen);

MoveToEx(hDC, 50, 50, NULL);

LineTo(hDC, 200, 50);

Комментариев нет:

Отправить комментарий