【发布时间】:2013-08-13 06:30:11
【问题描述】:
在头文件WinUser.h中,有一部分定义了SetWindowLong()的第二个参数的常量。
// ...
#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)
// ...
但如果定义了_WIN64,它们就在未定义之后;它是在我的 64 位系统中定义的。
如您所见,还有一组GWLP_*** 常量,但它们没有记录在SetWindowLong() 的页面中。
为什么这些常量在 x64 系统中未定义?
在 x64 系统中调用 SetWindowLong() 的替代方法是什么?
我的系统:
操作系统:Windows 7 Ultimate x64 SP1
IDE:Visual Studio 2012 Ultimate Update 3
【问题讨论】:
-
文档顶部的右侧是 注意此函数已被 SetWindowLongPtr 函数取代。要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用 SetWindowLongPtr 函数。
-
@chir 我在问题中给出的文档页面中找不到该注释。
-
我猜移动版的文档不包括注释。
标签: c++ winapi 64-bit setwindowlong