Fungsi SetWindowPos (winuser.h)
Mengubah ukuran, posisi, dan urutan Z dari jendela anak, pop-up, atau tingkat atas. Jendela-jendela ini dipesan sesuai dengan penampilan mereka di layar. Jendela paling atas menerima peringkat tertinggi dan merupakan jendela pertama dalam urutan Z.
Sintaks
BOOL SetWindowPos(
[in] HWND hWnd,
[in, optional] HWND hWndInsertAfter,
[in] int X,
[in] int Y,
[in] int cx,
[in] int cy,
[in] UINT uFlags
);
Parameter
[in] hWnd
Jenis: HWND
Handel ke jendela.
[in, optional] hWndInsertAfter
Jenis: HWND
Handel ke jendela untuk mendahului jendela yang diposisikan dalam urutan Z. Parameter ini harus berupa handel jendela atau salah satu nilai berikut.
Untuk informasi selengkapnya tentang bagaimana parameter ini digunakan, lihat bagian Keterangan berikut ini.
[in] X
Jenis: int
Posisi baru sisi kiri jendela, dalam koordinat klien.
[in] Y
Jenis: int
Posisi baru bagian atas jendela, dalam koordinat klien.
[in] cx
Jenis: int
Lebar baru jendela, dalam piksel.
[in] cy
Jenis: int
Tinggi jendela baru, dalam piksel.
[in] uFlags
Jenis: UINT
Bendera ukuran dan posisi jendela. Parameter ini bisa menjadi kombinasi dari nilai berikut.
Nilai | Makna |
---|---|
|
Jika utas panggilan dan utas yang memiliki jendela dilampirkan ke antrean input yang berbeda, sistem memposting permintaan ke utas yang memiliki jendela. Ini mencegah utas panggilan memblokir eksekusinya sementara utas lain memproses permintaan. |
|
Mencegah pembuatan pesan WM_SYNCPAINT . |
|
Menggambar bingkai (ditentukan dalam deskripsi kelas jendela) di sekitar jendela. |
|
Menerapkan set gaya bingkai baru menggunakan fungsi SetWindowLong . Mengirim pesan WM_NCCALCSIZE ke jendela, meskipun ukuran jendela tidak diubah. Jika bendera ini tidak ditentukan, WM_NCCALCSIZE dikirim hanya ketika ukuran jendela sedang diubah. |
|
Menyembunyikan jendela. |
|
Tidak mengaktifkan jendela. Jika bendera ini tidak diatur, jendela diaktifkan dan dipindahkan ke bagian atas grup paling atas atau non-teratas (tergantung pada pengaturan parameter hWndInsertAfter ). |
|
Membuang seluruh isi area klien. Jika bendera ini tidak ditentukan, konten area klien yang valid disimpan dan disalin kembali ke area klien setelah jendela berukuran atau diposisikan ulang. |
|
Mempertahankan posisi saat ini (mengabaikan parameter X dan Y ). |
|
Tidak mengubah posisi jendela pemilik dalam urutan Z. |
|
Tidak menggambar ulang perubahan. Jika bendera ini diatur, tidak ada pengecatan ulang dalam bentuk apa pun yang terjadi. Ini berlaku untuk area klien, area nonclient (termasuk bilah judul dan bilah gulir), dan bagian mana pun dari jendela induk yang terungkap sebagai akibat dari jendela yang dipindahkan. Ketika bendera ini diatur, aplikasi harus secara eksplisit membatalkan atau menggambar ulang bagian jendela dan jendela induk yang perlu digambar ulang. |
|
Sama seperti bendera SWP_NOOWNERZORDER . |
|
Mencegah jendela menerima pesan WM_WINDOWPOSCHANGING . |
|
Mempertahankan ukuran saat ini (mengabaikan parameter cx dan cy ). |
|
Mempertahankan urutan Z saat ini (mengabaikan parameter hWndInsertAfter ). |
|
Menampilkan jendela. |
Mengembalikan nilai
Jenis: BOOL
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Sebagai bagian dari arsitektur ulang Vista, semua layanan dipindahkan dari desktop interaktif ke Sesi 0. Operasi manajer jendela dan hwnd hanya efektif dalam sesi dan upaya lintas sesi untuk memanipulasi hwnd akan gagal. Untuk informasi selengkapnya, lihat Buku Masak Kompatibilitas Aplikasi: Cerita Pengembang Windows Vista.
Jika Anda telah mengubah data jendela tertentu menggunakan SetWindowLong, Anda harus memanggil SetWindowPos agar perubahan diterapkan. Gunakan kombinasi berikut untuk uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED
.
Jendela dapat dibuat menjadi jendela paling atas baik dengan mengatur parameter hWndInsertAfter ke HWND_TOPMOST dan memastikan bahwa bendera SWP_NOZORDER tidak diatur, atau dengan mengatur posisi jendela dalam urutan Z sehingga berada di atas jendela paling atas yang ada. Ketika jendela non-atas dibuat paling atas, jendela yang dimilikinya juga dibuat paling atas. Namun, pemiliknya tidak diubah.
Jika bendera SWP_NOACTIVATE atau SWP_NOZORDER tidak ditentukan (yaitu, ketika aplikasi meminta agar jendela diaktifkan secara bersamaan dan posisinya dalam urutan Z berubah), nilai yang ditentukan dalam hWndInsertAfter hanya digunakan dalam keadaan berikut.
- Bendera HWND_TOPMOST atau HWND_NOTOPMOST tidak ditentukan dalam hWndInsertAfter.
- Jendela yang diidentifikasi oleh hWnd bukan jendela aktif.
Jika jendela paling atas diposisikan ulang ke bagian bawah (HWND_BOTTOM) dari urutan Z atau setelah jendela non-paling atas, jendela tersebut tidak lagi paling atas. Ketika jendela paling atas dibuat non-topmost, pemilik dan jendela yang dimilikinya juga dibuat jendela non-topmost.
Jendela non-paling atas dapat memiliki jendela paling atas, tetapi kebalikannya tidak dapat terjadi. Jendela apa pun (misalnya, kotak dialog) yang dimiliki oleh jendela paling atas sendiri dibuat sebagai jendela paling atas, untuk memastikan bahwa semua jendela yang dimiliki tetap berada di atas pemiliknya.
Jika aplikasi tidak berada di latar depan, dan harus berada di latar depan, aplikasi harus memanggil fungsi SetForegroundWindow .
Untuk menggunakan SetWindowPos untuk membawa jendela ke atas, proses yang memiliki jendela harus memiliki izin SetForegroundWindow .
Contoh
Misalnya, lihat Menginisialisasi Kotak Dialog.
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 (termasuk Windows.h) |
Pustaka | User32.lib |
DLL | User32.dll |
Set API | ext-ms-win-ntuser-window-l1-1-0 (diperkenalkan dalam Windows 8) |
Lihat juga
Konseptual
Referensi