捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >API档案 > 正文
29 2017.06

SetWindowLongPtr

点击次数:1317 更新时间:2017-6-29 20:38:53  【打印此页

原文链接 -> 传送门

函数功能:

SetWindowLongPtr 函数用于改变指定窗口的属性,该函数也设置在窗口额外存储空间指定偏移量处的值。

注意:为了使代码同时兼容 32 位和 64 位版本的 Windows,请使用 SetWindowLongPtr 函数。当编译为 32 位时,SetWindowLongPtr 函数被定义为对 SetWindowLong 函数的调用。


API 函数原型:

注释:_In_ 说明该参数是输入的。

LONG_PTR WINAPI SetWindowLongPtr(
  _In_ HWND     hWnd,
  _In_ int      nIndex,
  _In_ LONG_PTR dwNewLong
);


参数解析:
 

参数

含义

hWnd

1. 指定目标窗口的句柄,间接的指向窗口所属的窗口类
2. 如果拥有 hWnd 参数指定的窗口的进程在 UIPI 层次上比调用线程所在进程具有更高的进程优先级,则 SetWindowLongPtr 函数调用失败
3. Windows XP/2000:如果 hWnd 参数指定的窗口与调用线程不在同一个进程,则 SetWindowLongPtr 函数调用失败

nIndex

1. 要设置的偏移量的值,并且值从 0 开始。有效值的范围从 0 到窗口额外存储空间的字节数减去一个整形数据的大小。要设置任意其他值,指定下列值之一:

含义

GWL_EXSTYLE(-20)

设置新的扩展窗口风格

GWL_HINSTANCE(-6)

设置应用程序实例的句柄

GWL_ID(-12)

设置子窗口新的标识符。窗口不能是顶层窗口

GWL_STYLE(-16)

设置新的窗口风格

GWL_USERDATA(-21)

1. 设置与窗口关联的用户数据
2. 这个数据是给创建该窗口的应用程序使用的
3. 它的值初始化为 0

GWL_WNDPROC(-4)

1. 设置新的窗口过程的地址
2. 如果窗口不属于同一进程的调用线程,则不能更改此属性


2. 当 hWnd 参数指定一个对话框时,也可以选择下列值:

含义

DWL_DLGPROC
(DWLP_MSGRESULT + sizeof(LRESULT))

设置对话框过程的地址

DWL_MSGRESULT
0

设置在对话框过程中一个消息处理的返回值

DWL_USER
(DWLP_DLGPROC + sizeof(DLGPROC))

设置应用程序新的私有的额外信息,例如句柄或指针

dwNewLong

替换值



返回值:

1. 如果函数调用成功,返回值为指定的 32 位整数的原来的值;

2. 如果函数调用失败,返回值为 0。设置有关错误的更多信息,请调用 GetLastError 函数。

3. 如果原来的值为 0,并且函数调用成功,则返回值为 0,但是函数并不清除最后的错误信息。为了判断函数是成功还是失败,你应该以参数 0 调用 SetLastError 函数来清除最后的错误信息,然后调用 SetWindowLongPtr 函数。如果函数失败就会返回 0,并且 GetLastError 返回一个非零值。


备注:

1. 某些窗口数据是被缓存的,所以你调用 SetWindowLongPtr 函数做出的改变直到调用 SetWindowPos 函数才会生效。

2. 如果调用带有 GWL_WNDPROC 索引的 SetWindowLongPtr 函数来替换窗口过程,则窗口过程必须符合 WindowProc回调函数说明部分指定的指南。

3. 如果调用带有 DWL_MSGRESULT 索引的 SetWindowLongPtr 函数来设置由对话框过程处理的消息的返回值,你应该在这之后立即返回 TRUE。否则,如果你调用了其他任何函数而导致对话框过程接收到一个窗口消息,则嵌套的窗口消息可能覆写使用 DWL_MSGRESULT 设定的返回值。

4. 调用带有 GWL_WNDPROC 索引的 SetWindowLongPtr 函数来创建一个窗口类的子类,并且该窗口类用于创建窗口。一个应用程序可以子类化一个系统类,但是不能子类化一个其他进程产生的窗口类。SetWindowLongPtr 函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类,从而使系统调用新的窗口过程而不是之前的窗口过程。应用程序必须通过调用 CallWindowProc 函数向之前窗口过程传递新窗口未处理的消息,这使得应用程序可以创建一个窗口过程链。

5. 通过在调用 RegisterClassEx 函数中将 WNDCLASSEX 结构中的 cbWndExtra 成员指定为非 0 值来保留窗口额外存储空间。

6. 你不能通过调用带有 GWL_HWNDPARENT 索引的 SetWindowLongPtr 函数来改变子窗口的父窗口,应该使用SetParent 函数。

7. 如果窗口具有 CS_CLASSDC 或 CS_OWNDC 窗口风格,不要设置扩展窗口风格为 WS_EX_COMPOSITED 或 WS_EX_LAYERED。

8. 调用 SetWindowLongPtr 函数来设置进度条的风格将重置它的位置。


需求:
 

Minimum supported client

Windows 2000 专业版 [仅桌面应用程序]

Minimum supported server

Windows 2000 服务器版 [仅桌面应用程序]

Header

Winuser.h (包含于 Windows.h)

Library

User32.lib

DLL

User32.dll

Unicode and ANSI names

SetWindowLongW (Unicode) 和 SetWindowLongA (ANSI)

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1317 更新时间:2017-6-29 20:38:53  【打印此页

上一条:CallWindowProc

下一条:WindowProc

关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修