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
Ruang Koordinat dan Fungsi Transformasi