Рисование маркеров


Вы можете использовать функции линии, чтобы рисовать маркеры. Маркер - это символ, расположенный над точкой. Рисующие программы используют маркеры, чтобы определять начальные, конечные и контрольные точки. Приложения электронной таблицы используют маркеры, чтобы обозначить важные точки на диаграмме или графике.

В нижеследующем образце кода, определяемая приложением функция Marker создает маркер при помощи использования функции MoveToEx и LineTo. Эти функции рисуют две пересекающихся линии, 20 пикселей по длине, расположенных в центре по координатам курсора.

void Marker(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, чтобы нарисовать маркер.

// Переменные рисующие линию и дугу 
 
static BOOL bCollectPoints; 
static POINT ptMouseDown[32]; 
static int index; 
POINTS ptTmp; 
RECT rc; 
 
    case WM_LBUTTONDOWN: 
 
 
        if (bCollectPoints && index < 32)
        { 
            // Создаем регион из рабочей области. 
 
            GetClientRect(hwnd, &rc); 
            hrgn = CreateRectRgn(rc.left, rc.top, 
                rc.right, rc.bottom); 
 
            ptTmp = MAKEPOINTS((POINTS FAR *) 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; 

Назад в оглавление
На главную страницу

Hosted by uCoz