gpt4 book ai didi

c++ - 如何在 64 位版本的 Windows 中调用 SetWindowLong()?

转载 作者:IT老高 更新时间:2023-10-28 22:33:30 24 4
gpt4 key购买 nike

在头文件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

最佳答案

在 x64 构建中,某些窗口数据值(例如,指的是像窗口过程这样的“指针大小”对象)需要是 64 位的。为了向后兼容,旧的 SetWindowLong()GetWindowLong() 函数仅限于 DWORD 大小(32 位)的值,Microsoft 引入了新的版本、SetWindowLongPtr()GetWindowLongPtr() 允许您使用指针大小的值(32 位构建中的 32 位和 64 位构建中的 64 位)。

现在建议您始终使用 SetWindowLongPtr()GWLP_xxx 常量,无论您是为 32 位还是 64 位构建,但在 64 位构建您需要使用新函数,因此定义为#undefined 会导致构建错误,从而迫使您修复代码。

关于c++ - 如何在 64 位版本的 Windows 中调用 SetWindowLong()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com