绘图标记
可以使用线条函数绘制标记。 标记是一个以点为中心的符号。 绘图应用程序使用标记来指定起点、终点和控制点。 电子表格应用程序使用标记来指定图表或图形上的兴趣点。
在以下代码示例中,应用程序定义的 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);
}
当用户按下鼠标左键时,系统会将光标的坐标存储在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;