更改指定窗口的属性。 该函数还会在额外的窗口内存中设置指定偏移量的值。
语法
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
参数
[in] hWnd
类型:HWND
窗口的句柄,间接地是窗口所属的类。 如果拥有 hWnd 参数指定的窗口的进程高于调用线程所在的进程,则 SetWindowLongPtr 函数将失败。
Windows XP/2000: 如果 hWnd 参数指定的窗口不属于与调用线程相同的进程,则 SetWindowLongPtr 函数将失败。
[in] nIndex
类型:int
要设置的值的从零开始的偏移量。 有效值介于零到额外窗口内存的字节数之间,减去 LONG_PTR的大小。 若要设置任何其他值,请指定以下值之一。
价值 | 含义 |
---|---|
|
设置新的 扩展窗口样式。 |
|
设置新的应用程序实例句柄。 |
|
设置顶级窗口的新所有者。 |
|
设置子窗口的新标识符。 窗口不能是顶级窗口。 |
|
设置新的 窗口样式。 |
|
设置与窗口关联的用户数据。 此数据供创建窗口的应用程序使用。 其值最初为零。 |
|
设置窗口过程的新地址。 |
当 hWnd 参数标识对话框时,也可以使用以下值。
价值 | 含义 |
---|---|
|
设置指向对话框过程的新指针。 |
|
设置在对话框过程中处理的消息的返回值。 |
|
设置应用程序专用的新额外信息,例如句柄或指针。 |
[in] dwNewLong
类型:LONG_PTR
替换值。
返回值
类型:LONG_PTR
如果函数成功,则返回值为指定偏移量的上一个值。
如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。
如果上一个值为零且函数成功,则返回值为零,但该函数未清除最后的错误信息。 若要确定成功或失败,请通过调用 0 调用 SetLastError 来清除最后一个错误信息,然后调用 SetWindowLongPtr。 函数失败将由零的返回值和非零的 GetLastError 结果指示。
注解
缓存某些窗口数据,因此在使用 SetWindowLongPtr 进行的更改在调用 SetWindowPos 函数之前不会生效。
如果将 SetWindowLongPtr 与 GWLP_WNDPROC 索引一起使用来替换窗口过程,则窗口过程必须符合 WindowProc 回调函数说明中指定的准则。
如果将 SetWindowLongPtr 与 DWLP_MSGRESULT 索引一起使用来设置对话框过程处理的消息的返回值,则对话框过程应随后直接返回 TRUE 。 否则,如果调用任何导致对话框过程接收窗口消息的函数,则嵌套窗口消息可能会覆盖使用 DWLP_MSGRESULT设置的返回值。
使用GWLP_WNDPROC索引调用 SetWindowLongPtr 将创建用于创建窗口的窗口类的子类。 应用程序可以对系统类进行子类,但不应将由另一个进程创建的窗口类子类。 SetWindowLongPtr 函数通过更改与特定窗口类关联的窗口过程来创建窗口子类,从而导致系统调用新窗口过程而不是上一个窗口过程。 应用程序必须通过调用 CallWindowProc 将新窗口过程未处理的任何消息传递给以前的窗口过程。 这允许应用程序创建窗口过程链。
通过在用于 RegisterClassEx 函数的 WNDCLASSEX 结构的 cbWndExtra 成员中指定非零值来保留额外的窗口内存。
请勿使用 GWLP_HWNDPARENT 索引调用 SetWindowLongPtr 以更改子窗口的父窗口。 请改用 SetParent 函数。
GWLP_HWNDPARENT 用于更改顶级窗口的所有者,而不是子窗口的父级。
窗口可以具有父级或所有者,或者两者都不能同时同时拥有。
如果窗口的类样式为 CS_CLASSDC 或 CS_PARENTDC,请不要 WS_EX_COMPOSITED 或 WS_EX_LAYERED设置扩展窗口样式。
调用 SetWindowLongPtr 在进度栏上设置样式将重置其位置。
注释
winuser.h 标头将 SetWindowLongPtr 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows操作系统 |
标头 | winuser.h (包括 Windows.h) |
图书馆 | User32.lib |
DLL | User32.dll |
API 集 | ext-ms-win-ntuser-windowclass-l1-1-0(在 Windows 8 中引入) |
另请参阅
概念
引用