描画マーカー
線関数を使用してマーカーを描画できます。 マーカーは、ポイントの上に中央揃えのシンボルです。 描画アプリケーションでは、マーカーを使用して開始点、終了点、およびコントロール ポイントを指定します。 スプレッドシート アプリケーションでは、マーカーを使用してグラフまたはグラフ上の関心ポイントを指定します。
次のコード サンプルでは、アプリケーション定義の Marker 関数は 、MoveToEx 関数と LineTo 関数を使用してマーカーを作成します。 これらの関数は、カーソル座標の中央に 20 ピクセルの長さの 2 本の交差する線を描画します。
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;