Вы можете использовать функции линии, чтобы рисовать маркеры. Маркер - это
символ, расположенный над точкой. Рисующие программы используют маркеры, чтобы
определять начальные, конечные и контрольные точки. Приложения электронной
таблицы используют маркеры, чтобы обозначить важные точки на диаграмме или
графике.
В нижеследующем образце кода, определяемая приложением функция
Marker создает
маркер при помощи использования функции MoveToEx и
LineTo. Эти функции рисуют
две пересекающихся линии, 20 пикселей по длине, расположенных в центре по
координатам курсора.
voidMarker(LONG x, LONG y, HWND hwnd)
{HDC hdc;
hdc = GetDC(hwnd);
MoveToEx(hdc, (int) x - 10, (int) y, (LPPOINT) NULL);
LineTo(hdc, (int) x + 10, (int) y);
MoveToEx(hdc, (int) x, (int) y - 10, (LPPOINT) NULL);
LineTo(hdc, (int) x, (int) y + 10);
ReleaseDC(hwnd, hdc);
}
Система хранит координаты курсора в параметре lParam сообщения
WM_LBUTTONDOWN,
когда пользователь нажимает левую кнопку мыши. Нижеследующий код демонстрирует,
как приложение получает эти координаты, устанавливает, находятся ли они в
пределах его рабочей области и пересылает их в функцию Marker, чтобы нарисовать
маркер.
// Переменные рисующие линию и дугу
staticBOOL bCollectPoints;
staticPOINT ptMouseDown[32];
staticint index;
POINTS ptTmp;
RECT rc;
caseWM_LBUTTONDOWN:
if (bCollectPoints && index <32)
{
// Создаем регион из рабочей области.
GetClientRect(hwnd, &rc);
hrgn =CreateRectRgn(rc.left, rc.top,
rc.right, rc.bottom);
ptTmp =MAKEPOINTS((POINTSFAR*) lParam);
ptMouseDown[index].x = (LONG) ptTmp.x;
ptMouseDown[index].y = (LONG) ptTmp.y;
// Проверка на совпадение в рабочем прямоугольнике.
if (PtInRegion(hrgn, ptMouseDown[index].x,
ptMouseDown[index].y))
{
// Если совпадение происходит, запись координаты мыши.
Marker(ptMouseDown[index].x, ptMouseDown[index].y,
hwnd);
index++;
}}break;