Bagikan melalui


Penanda Gambar

Anda dapat menggunakan fungsi garis untuk menggambar penanda. Penanda adalah simbol yang berpusat di atas titik. Aplikasi gambar menggunakan penanda untuk menunjuk titik awal, titik akhir, dan titik kontrol. Aplikasi spreadsheet menggunakan penanda untuk menunjuk tempat menarik pada bagan atau grafik.

Dalam sampel kode berikut, fungsi Penanda yang ditentukan aplikasi membuat penanda dengan menggunakan fungsi MoveToEx dan LineTo . Fungsi-fungsi ini menggambar dua garis yang berpotangan, panjangnya 20 piksel, berpusat di atas koordinat kursor.

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

Sistem menyimpan koordinat kursor dalam parameter lParam pesan WM_LBUTTONDOWN saat pengguna menekan tombol mouse kiri. Kode berikut menunjukkan bagaimana aplikasi mendapatkan koordinat ini, menentukan apakah aplikasi berada di dalam area kliennya, dan meneruskannya ke fungsi Penanda untuk menggambar penanda.

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