绘图标记

【勇芳软件工作室】汉化HomePreviousNext

您可以使用线条函数绘制标记。标记是以点为中心的符号。绘图应用程序使用标记来指定起点,终点和控制点。电子表格应用程序使用标记来指定图表或图表上的兴趣点。

在以下代码示例中,应用程序定义的Marker函数使用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);

}

当用户按下鼠标左键时,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;