Fungsi SetWindowLongA (winuser.h)

Mengubah atribut jendela yang ditentukan. Fungsi ini juga mengatur nilai 32-bit (panjang) pada offset yang ditentukan ke dalam memori jendela tambahan.

Catatan Fungsi ini telah digantikan oleh fungsi SetWindowLongPtr . Untuk menulis kode yang kompatibel dengan Windows versi 32-bit dan 64-bit, gunakan fungsi SetWindowLongPtr .
 

Sintaks

LONG SetWindowLongA(
  [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
GWL_EXSTYLE
-20
Mengatur gaya jendela yang diperluas baru.
GWL_HINSTANCE
-6
Mengatur handel instans aplikasi baru.
GWL_ID
-12
Mengatur pengidentifikasi baru jendela anak. Jendela tidak boleh berupa jendela tingkat atas.
GWL_STYLE
-16
Mengatur gaya jendela baru.
GWL_USERDATA
-21
Mengatur data pengguna yang terkait dengan jendela. Data ini ditujukan untuk digunakan oleh aplikasi yang membuat jendela. Nilainya awalnya nol.
GWL_WNDPROC
-4
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.

Nilai Makna
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Mengatur alamat baru prosedur kotak dialog.
DWL_MSGRESULT
0
Mengatur nilai pengembalian pesan yang diproses dalam prosedur kotak dialog.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Mengatur informasi tambahan baru yang bersifat privat ke aplikasi, seperti handel atau penunjuk.

[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

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-windowclass-l1-1-0 (diperkenalkan dalam Windows 8)

Lihat juga

CallWindowProc

Konseptual

GetWindowLong

Referensi

RegisterClassEx

SetParent

SetWindowLongPtr

WNDCLASSEX

Kelas Jendela

WindowProc