Fungsi MapWindowPoints (winuser.h)

Fungsi MapWindowPoints mengonversi (memetakan) sekumpulan titik dari ruang koordinat relatif terhadap satu jendela ke ruang koordinat relatif terhadap jendela lain.

Sintaks

int MapWindowPoints(
  [in]      HWND    hWndFrom,
  [in]      HWND    hWndTo,
  [in, out] LPPOINT lpPoints,
  [in]      UINT    cPoints
);

Parameter

[in] hWndFrom

Handel ke jendela tempat titik dikonversi. Jika parameter ini NULL atau HWND_DESKTOP, titik-titik dianggap berada dalam koordinat layar.

[in] hWndTo

Handel ke jendela tempat titik dikonversi. Jika parameter ini null atau HWND_DESKTOP, titik dikonversi ke koordinat layar.

[in, out] lpPoints

Penunjuk ke array struktur POINT yang berisi kumpulan titik yang akan dikonversi. Titik-titiknya ada di unit perangkat. Parameter ini juga dapat menunjuk ke struktur RECT , dalam hal ini parameter cPoints harus diatur ke 2.

[in] cPoints

Jumlah struktur POINT dalam array yang ditujukkan oleh parameter lpPoints .

Nilai kembali

Jika fungsi berhasil, kata berurutan rendah dari nilai yang dikembalikan adalah jumlah piksel yang ditambahkan ke koordinat horizontal setiap titik sumber untuk menghitung koordinat horizontal setiap titik tujuan. (Selain itu, jika tepatnya salah satu hWndFrom dan hWndTo dicerminkan, maka setiap koordinat horizontal yang dihasilkan dikalikan dengan -1.) Kata urutan tinggi adalah jumlah piksel yang ditambahkan ke koordinat vertikal setiap titik sumber untuk menghitung koordinat vertikal setiap titik tujuan.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Panggil SetLastError sebelum memanggil metode ini untuk membedakan nilai pengembalian kesalahan dari nilai pengembalian "0" yang sah.

Keterangan

Jika hWndFrom atau hWndTo (atau keduanya) adalah jendela cermin (yaitu, memiliki WS_EX_LAYOUTRTL gaya diperluas) dan tepatnya dua titik diteruskan di lpPoints, MapWindowPoints akan menafsirkan dua titik tersebut sebagai RECT dan mungkin secara otomatis menukar bidang kiri dan kanan persegi panjang tersebut untuk memastikan bahwa kiri tidak lebih besar dari kanan. Jika sejumlah titik selain 2 diteruskan di lpPoints, maka MapWindowPoints akan dengan benar memetakan koordinat masing-masing titik tersebut secara terpisah, jadi jika Anda meneruskan penunjuk ke array lebih dari satu persegi panjang di lpPoints, persegi panjang baru mungkin mendapatkan bidang kirinya lebih besar dari kanan. Dengan demikian, untuk menjamin transformasi koordinat persegi panjang yang benar, Anda harus memanggil MapWindowPoints dengan satu penunjuk RECT sekaligus, seperti yang ditunjukkan dalam contoh berikut:


   RECT        rc[10];

   for(int i = 0; i < (sizeof(rc)/sizeof(rc[0])); i++)
   {
       MapWindowPoints(hWnd1, hWnd2, (LPPOINT)(&rc[i]), (sizeof(RECT)/sizeof(POINT)) );
   }

Selain itu, jika Anda perlu memetakan dengan tepat dua titik independen dan tidak ingin logika RECT diterapkan oleh MapWindowPoints, untuk menjamin hasil yang benar, Anda harus memanggil MapWindowPoints dengan satu pointer POINT sekaligus, seperti yang ditunjukkan dalam contoh berikut:


   POINT pt[2];

   MapWindowPoints(hWnd1, hWnd2, &pt[0], 1);
   MapWindowPoints(hWnd1, hWnd2, &pt[1], 1);

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header winuser.h (sertakan Windows.h)
Pustaka User32.lib
DLL User32.dll
Set API ext-ms-win-ntuser-window-l1-1-2 (diperkenalkan dalam Windows 10, versi 10.0.10240)

Lihat juga

ClientToScreen

Ruang Koordinat dan Fungsi Transformasi

Gambaran Umum Ruang Koordinat dan Transformasi

TITIK

RECT

ScreenToClient