SetWindowLong

【勇芳软件工作室】汉化HomePreviousNext

SetWindowLong函数更改指定窗口的属性。该函数还将指定偏移量的32位(长)值设置为窗口的额外窗口存储器。

LONG SetWindowLong

HWND 【的hWnd】,//窗口的句柄
INT 【参数nIndex】,//要设置的值的偏移量
LONG 【dwNewLong】//新值
); 

参数

【的hWnd】

标识窗口,间接地标识窗口所属的类。

【参数nIndex】

指定要设置的值的基于零的偏移量。有效值的范围为零,通过额外的窗口内存的字节数减去4;例如,如果指定了12个或更多字节的额外内存,则值为8将成为第三个32位整数的索引。要设置任何其他值,请指定以下值之一:

行动
GWL_EXSTYLE设置一个新的扩展窗口样式。
GWL_STYLE设置一个新的窗口样式。
GWL_WNDPROC设置窗口过程的新地址。
GWL_HINSTANCE设置一个新的应用程序实例句柄。
GWL_ID设置窗口的新标识符。
GWL_USERDATA设置与窗口相关联的32位值。每个窗口都有一个相应的32位值,用于创建窗口的应用程序使用。

【的hWnd】参数标识一个对话框时,以下值也可用:

行动
DWL_DLGPROC设置对话框过程的新地址。
DWL_MSGRESULT设置对话框过程中处理的消息的返回值。
DWL_USER设置对应用程序是私有的新的额外信息,如句柄或指针。

【dwNewLong】

指定替换值。

返回值

如果函数成功,则返回值是指定的32位整数的前一个值。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.

如果指定的32位整数的前一个值为零,并且该函数成功,则返回值为零,但该函数不会清除最后一个错误信息。这使得很难确定成功或失败。要解决这个问题,您应该在致电SetWindowLong之前致电SetLastError(0)清除最后一个错误信息。然后,函数失败将由零的返回值和非零值的GetLastError结果指示。

备注

如果【的hWnd】参数指定的窗口不属于与调用线程相同的进程,则SetWindowLong功能将失败。

如果使用SetWindowLong功能和GWL_WNDPROC索引替换窗口过程,则窗口过程必须符合WindowProc回调函数说明中指定的准则。

使用GWL_WNDPROC索引调用SetWindowLong将创建用于创建窗口的窗口类的子类。应用程序不应该对由其他进程创建的窗口进行子类化。SetWindowLong函数通过更改与特定窗口关联的窗口过程来创建窗口子类,导致Windows调用新窗口过程而不是前一个窗口过程。应用程序必须通过调用CallWindowProc将新窗口过程未处理的任何消息传递到上一个窗口过程。这允许应用程序创建一个窗口过程链。

通过在与RegisterClass功能一起使用的WNDCLASS结构的cbWndExtra成员中指定非零值来预留额外的窗口内存。

您不得使用GWL_HWNDPARENT索引调用SetWindowLong来更改子窗口的父级。而是使用SetParent功能。

也可以看看

CallWindowProc, GetWindowLong, GetWindowWord, RegisterClass, SetParent, SetWindowWord, WindowProc, WNDCLASS