您可以使用线条函数绘制标记。标记是以点为中心的符号。绘图应用程序使用标记来指定起点,终点和控制点。电子表格应用程序使用标记来指定图表或图表上的兴趣点。
在以下代码示例中,应用程序定义的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);
}
当用户按下鼠标左键时,Windows将光标的坐标存储在WM_LBUTTONDOWN消息的【lParam的】参数中。以下代码演示了应用程序如何获取这些坐标,确定它们是否位于其客户区域内,并将其传递给Marker函数来绘制标记。
/ *直线和弧形变量* /
static BOOL bCollectPoints;
static POINT ptMouseDown[32];
static int index;
POINTS ptTmp;
RECT rc;
case WM_LBUTTONDOWN:
if(bCollectPoints & & index {98??9796003} 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,
[index].而且ptMouseDown)){
/ *如果发生命中,请记录鼠标的坐标。*/
Marker(ptMouseDown [index] .x,ptMouseDown [index] .y,
hwnd);
index++;
}
}
break;