Marcadores de dibujo
Puede usar las funciones de línea para dibujar marcadores. Un marcador es un símbolo centrado sobre un punto. Las aplicaciones de dibujo usan marcadores para designar puntos iniciales, puntos finales y puntos de control. Las aplicaciones de hoja de cálculo usan marcadores para designar puntos de interés en un gráfico o gráfico.
En el ejemplo de código siguiente, la función Marker definida por la aplicación crea un marcador mediante las funciones MoveToEx y LineTo . Estas funciones dibujan dos líneas intersecntes, de 20 píxeles de longitud, centradas sobre las coordenadas del cursor.
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);
}
El sistema almacena las coordenadas del cursor en el parámetro lParam del mensaje de WM_LBUTTONDOWN cuando el usuario presiona el botón izquierdo del mouse. En el código siguiente se muestra cómo una aplicación obtiene estas coordenadas, determina si se encuentran dentro de su área cliente y las pasa a la función Marker para dibujar el marcador.
// 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;