Marqueurs de dessin

Vous pouvez utiliser les fonctions de ligne pour dessiner des marqueurs. Un marqueur est un symbole centré sur un point. Les applications de dessin utilisent des marqueurs pour désigner les points de départ, les points de fin et les points de contrôle. Les applications de feuilles de calcul utilisent des marqueurs pour désigner des points d’intérêt sur un graphique ou un graphique.

Dans l’exemple de code suivant, la fonction Marker définie par l’application crée un marqueur à l’aide des fonctions MoveToEx et LineTo . Ces fonctions dessinent deux lignes croisées, de 20 pixels de longueur, centrées sur les coordonnées du curseur.

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); 
} 

Le système stocke les coordonnées du curseur dans le paramètre lParam du message WM_LBUTTONDOWN lorsque l’utilisateur appuie sur le bouton gauche de la souris. Le code suivant montre comment une application obtient ces coordonnées, détermine si elles se trouvent dans sa zone cliente et les transmet à la fonction Marker pour dessiner le marqueur.

// 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;