그리기 표식
선 함수를 사용하여 표식을 그릴 수 있습니다. 표식은 점 가운데에 있는 기호입니다. 그리기 애플리케이션은 마커를 사용하여 시작점, 끝점 및 제어점을 지정합니다. 스프레드시트 애플리케이션은 표식을 사용하여 차트 또는 그래프의 관심 지점을 지정합니다.
다음 코드 샘플에서 애플리케이션 정의 표식 함수는 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);
}
시스템은 사용자가 마우스 왼쪽 단추를 누를 때 커서의 좌표를 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;