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.

Nilai Makna
HWND_BOTTOM
(HWND)1
Places jendela di bagian bawah urutan Z. Jika parameter hWnd mengidentifikasi jendela paling atas, jendela kehilangan status paling atas dan ditempatkan di bagian bawah semua jendela lainnya.
HWND_NOTOPMOST
(HWND)-2
Places jendela di atas semua jendela non-teratas (yaitu, di belakang semua jendela paling atas). Bendera ini tidak berpengaruh jika jendela sudah menjadi jendela non-atas.
HWND_TOP
(HWND)0
Places jendela di bagian atas urutan Z.
HWND_TOPMOST
(HWND)-1
Places jendela di atas semua jendela non-teratas. Jendela mempertahankan posisi paling atas bahkan ketika dinonaktifkan.
 

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
SWP_ASYNCWINDOWPOS
0x4000
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.
SWP_DEFERERASE
0x2000
Mencegah pembuatan pesan WM_SYNCPAINT .
SWP_DRAWFRAME
0x0020
Menggambar bingkai (ditentukan dalam deskripsi kelas jendela) di sekitar jendela.
SWP_FRAMECHANGED
0x0020
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.
SWP_HIDEWINDOW
0x0080
Menyembunyikan jendela.
SWP_NOACTIVATE
0x0010
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 ).
SWP_NOCOPYBITS
0x0100
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.
SWP_NOMOVE
0x0002
Mempertahankan posisi saat ini (mengabaikan parameter X dan Y ).
SWP_NOOWNERZORDER
0x0200
Tidak mengubah posisi jendela pemilik dalam urutan Z.
SWP_NOREDRAW
0x0008
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.
SWP_NOREPOSITION
0x0200
Sama seperti bendera SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Mencegah jendela menerima pesan WM_WINDOWPOSCHANGING .
SWP_NOSIZE
0x0001
Mempertahankan ukuran saat ini (mengabaikan parameter cx dan cy ).
SWP_NOZORDER
0x0004
Mempertahankan urutan Z saat ini (mengabaikan parameter hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
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.
Aplikasi tidak dapat mengaktifkan jendela yang tidak aktif tanpa juga membawanya ke bagian atas urutan Z. Aplikasi dapat mengubah posisi jendela yang diaktifkan dalam urutan Z tanpa batasan, atau dapat mengaktifkan jendela dan kemudian memindahkannya ke bagian atas jendela paling atas atau non-atas.

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

MoveWindow

Referensi

SetActiveWindow

SetForegroundWindow

Windows