Fungsi SetWindowLongW (winuser.h)
Mengubah atribut jendela yang ditentukan. Fungsi ini juga mengatur nilai 32-bit (panjang) pada offset yang ditentukan ke dalam memori jendela tambahan.
Sintaks
LONG SetWindowLongW(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG dwNewLong
);
Parameter
[in] hWnd
Jenis: HWND
Handel ke jendela dan, secara tidak langsung, kelas tempat jendela berada.
[in] nIndex
Jenis: int
Offset berbasis nol ke nilai yang akan ditetapkan. Nilai yang valid berada dalam rentang nol melalui jumlah byte memori jendela tambahan, dikurangi ukuran bilangan bulat. Untuk mengatur nilai lain, tentukan salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Mengatur gaya jendela yang diperluas baru. |
|
Mengatur handel instans aplikasi baru. |
|
Mengatur pengidentifikasi baru jendela anak. Jendela tidak boleh berupa jendela tingkat atas. |
|
Mengatur gaya jendela baru. |
|
Mengatur data pengguna yang terkait dengan jendela. Data ini ditujukan untuk digunakan oleh aplikasi yang membuat jendela. Nilainya awalnya nol. |
|
Mengatur alamat baru untuk prosedur jendela.
Anda tidak dapat mengubah atribut ini jika jendela bukan milik proses yang sama dengan utas panggilan. |
Nilai berikut juga tersedia saat parameter hWnd mengidentifikasi kotak dialog.
[in] dwNewLong
Jenis: LONG
Nilai pengganti.
Nilai kembali
Jenis: LONG
Jika fungsi berhasil, nilai yang dikembalikan adalah nilai sebelumnya dari bilangan bulat 32-bit yang ditentukan.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Jika nilai sebelumnya dari bilangan bulat 32-bit yang ditentukan adalah nol, dan fungsi berhasil, nilai yang dikembalikan adalah nol, tetapi fungsi tidak menghapus informasi kesalahan terakhir. Ini menyulitkan untuk menentukan keberhasilan atau kegagalan. Untuk menangani hal ini, Anda harus menghapus informasi kesalahan terakhir dengan memanggil SetLastError dengan 0 sebelum memanggil SetWindowLong. Kemudian, kegagalan fungsi akan ditunjukkan oleh nilai pengembalian nol dan hasil GetLastError yang bukan nol.
Keterangan
Data jendela tertentu di-cache, sehingga perubahan yang Anda buat menggunakan SetWindowLong tidak akan berlaku sampai Anda memanggil fungsi SetWindowPos . Secara khusus, jika Anda mengubah salah satu gaya bingkai, Anda harus memanggil SetWindowPos dengan bendera SWP_FRAMECHANGED agar cache diperbarui dengan benar.
Jika Anda menggunakan SetWindowLong dengan indeks GWL_WNDPROC untuk mengganti prosedur jendela, prosedur jendela harus sesuai dengan pedoman yang ditentukan dalam deskripsi fungsi panggilan balik WindowProc .
Jika Anda menggunakan SetWindowLong dengan indeks DWL_MSGRESULT untuk mengatur nilai pengembalian untuk pesan yang diproses oleh prosedur dialog, Anda harus mengembalikan TRUE langsung setelahnya. Jika tidak, jika Anda memanggil fungsi apa pun yang mengakibatkan prosedur dialog Anda menerima pesan jendela, pesan jendela berlapis dapat menimpa nilai pengembalian yang Anda tetapkan menggunakan DWL_MSGRESULT.
Memanggil SetWindowLong dengan indeks GWL_WNDPROC membuat subkelas kelas jendela yang digunakan untuk membuat jendela. Aplikasi dapat mensubkelas kelas sistem, tetapi tidak boleh subkelas kelas jendela yang dibuat oleh proses lain. Fungsi SetWindowLong membuat subkelas jendela dengan mengubah prosedur jendela yang terkait dengan kelas jendela tertentu, menyebabkan sistem memanggil prosedur jendela baru alih-alih yang sebelumnya. Aplikasi harus meneruskan pesan apa pun yang tidak diproses oleh prosedur jendela baru ke prosedur jendela sebelumnya dengan memanggil CallWindowProc. Ini memungkinkan aplikasi untuk membuat rantai prosedur jendela.
Cadangkan memori jendela tambahan dengan menentukan nilai bukan nol di anggota cbWndExtra dari struktur WNDCLASSEX yang digunakan dengan fungsi RegisterClassEx .
Anda tidak boleh memanggil SetWindowLong dengan indeks GWL_HWNDPARENT untuk mengubah induk jendela anak. Sebagai gantinya, gunakan fungsi SetParent .
Jika jendela memiliki gaya kelas CS_CLASSDC atau CS_OWNDC, jangan atur gaya jendela yang diperluas WS_EX_COMPOSITED atau WS_EX_LAYERED.
Memanggil SetWindowLong untuk mengatur gaya pada progressbar akan mengatur ulang posisinya.
Contoh
Misalnya, lihat Subkelas Jendela.
Catatan
Header winuser.h mendefinisikan SetWindowLong sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
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-windowclass-l1-1-0 (diperkenalkan di Windows 8) |
Lihat juga
Konseptual
Referensi