Share via


그리기 표식

선 함수를 사용하여 표식을 그릴 수 있습니다. 표식은 점 가운데에 있는 기호입니다. 그리기 애플리케이션은 마커를 사용하여 시작점, 끝점 및 제어점을 지정합니다. 스프레드시트 애플리케이션은 표식을 사용하여 차트 또는 그래프의 관심 지점을 지정합니다.

다음 코드 샘플에서 애플리케이션 정의 표식 함수는 MoveToExLineTo 함수를 사용하여 표식을 만듭니다. 이러한 함수는 커서 좌표 가운데에 길이가 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); 
} 

시스템은 사용자가 마우스 왼쪽 단추를 누를 때 커서의 좌표를 WM_LBUTTONDOWN 메시지의 lParam 매개 변수에 저장합니다. 다음 코드는 애플리케이션이 이러한 좌표를 가져오고 클라이언트 영역 내에 있는지 여부를 확인하고 표식을 그리기 위해 Marker 함수에 전달하는 방법을 보여 줍니다.

// Line- and arc-drawing variables  
 
static BOOL bCollectPoints; 
static POINT ptMouseDown[32]; 
static int index; 
POINTS ptTmp; 
RECT rc; 
 
    case WM_LBUTTONDOWN: 
 
 
        if (bCollectPoints && index < 32)
        { 
            // Create the region from the client area.  
 
            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; 
 
            // Test for a hit in the client rectangle.  
 
            if (PtInRegion(hrgn, ptMouseDown[index].x, 
                    ptMouseDown[index].y)) 
            { 
                // If a hit occurs, record the mouse coords.  
 
                Marker(ptMouseDown[index].x, ptMouseDown[index].y, 
                    hwnd); 
                index++; 
            } 
        } 
        break;