W pliku nagłówkowym WinUser.h
znajduje się część, w której zdefiniowano stałe drugiego parametru SetWindowLong()
.Jak wywołać funkcję SetWindowLong() w 64-bitowych wersjach systemu Windows?
// ...
#define GWL_WNDPROC (-4)
#define GWL_HINSTANCE (-6)
#define GWL_HWNDPARENT (-8)
#define GWL_STYLE (-16)
#define GWL_EXSTYLE (-20)
#define GWL_USERDATA (-21)
#define GWL_ID (-12)
#ifdef _WIN64
#undef GWL_WNDPROC
#undef GWL_HINSTANCE
#undef GWL_HWNDPARENT
#undef GWL_USERDATA
#endif /* _WIN64 */
#define GWLP_WNDPROC (-4)
#define GWLP_HINSTANCE (-6)
#define GWLP_HWNDPARENT (-8)
#define GWLP_USERDATA (-21)
#define GWLP_ID (-12)
// ...
Ale są one tuż po niezdefiniowaniu, jeśli zdefiniowano _WIN64
; i jest zdefiniowany w moim 64-bitowym systemie.
Jak widać, istnieje również zestaw stałych GWLP_***
, ale nie są one udokumentowane na stronie SetWindowLong()
.
Dlaczego te stałe są niezdefiniowane w systemach x64?
Jaki jest alternatywny sposób wywoływania SetWindowLong()
w systemach x64?
Mój system:
OS: Windows 7 Ultimate x64 SP1
IDE Visual Studio 2012 Ostateczny Update 3
U góry dokumentacji znajduje się * Uwaga Ta funkcja została zastąpiona przez funkcję SetWindowLongPtr. Aby napisać kod, który jest kompatybilny zarówno z 32-bitowymi, jak i 64-bitowymi wersjami systemu Windows, użyj funkcji SetWindowLongPtr. * – chris
@chir Nie mogę znaleźć tej notatki na stronie dokumentacji podanej w pytaniu. – hkBattousai
Chyba wersja mobilna dokumentacji nie zawiera notatki. – chris