### 函数功能

该函数改变指定窗口的属性。函数也将在指定偏移地址的一个32位值存入窗口的额外窗口存。

### 函数原型

LONG SetWindowLong（HWN hWnd，int nlndex．LONG dwNewLong）；

### 参数

hWnd:窗口句柄，及间接声明的该窗口所属的类。
nlndex:给出了要设置的值的零起点的偏移地址。有效值为从0到额外窗口存储空间的字节数一4。例如
如果指定了12位或更多位字节的额外内存，则32位值的索引值应为第3个32位值的索引位8。设置其他值，要指定下列中的一个值：
GWL_EXSTYLE；设置一个新的扩展窗口风格。GWL_STYLE：设置一个新的窗口风格。
GWL_WNDPROC:为窗口过程设置一个新的地址。
GWL_HINSTANCE：设置一个新的应用程序事例句柄。GWL_ID：为窗口设置一个新的标识。
GWL_USERDATA：设置与窗口有关的32位值。每个窗口都有一个对应的32位值供创建该窗口的应用程序使用。
当hWnd参数标识了一个对话框是可使用下列值的：
DWL_DLGPROC：设置对话框过程的新地址。
DWL_MSGRESULT：设置在对话框过程中处理的消息返回值。
DWL_USER：设置新的额外信息，该信息仅为应用程序所有，例如句柄或指针。
dWNewLong：指定替换值。

### 返回值

如果函数成功，返回值为给定的32位整数的原来的值。如果函数失败，返回值为0。若想获得更多错误信息，请调用GetLastError函数。
如果给定的32位值的原来的值是0，并且函数成功，则返回值为0。但是这时函数并不清除最后的错误信息，这就很难判断函数成功与否。这时，就应在调用SetWindowLong之前调用calingsetLastEm函数清除最后的错误信息。这样，如果函数失败就会返回0，并且GetLastError也返回一个非零值。
备注：如果由hWnd参数指定的窗口与调用线程不属于同一进程，将导致SetWindowLong函数失败。指定的窗日数据是在缓存中保存的，因此在调用SetWindowLong之后再调用SetWindowPos函数才O
SetWindowLong函数所作的改变生效。
如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程，则该窗日过程必须WindowProc回调函数说明部分指定的指导行一致。
如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消息的和值，应在此后立即返回TRUE。否则，如果又调用了其他函数而使对话框过程接收到一个窗口消息，

### 返回值

如果函数成功，返回值为给定的32位整数的原来的值。如果函数失败，返回值为0。若想获得更多错误信息，请调用GetLastError函数。
如果给定的32位值的原来的值是0，并且函数成功，则返回值为0。但是这时函数并不清除最后的错误信息，这就很难判断函数成功与否。这时，就应在调用SetWindowLong之前调用calingsetLastEm函数清除最后的错误信息。这样，如果函数失败就会返回0，并且GetLastError也返回一个非零值。
备注：如果由hWnd参数指定的窗口与调用线程不属于同一进程，将导致SetWindowLong函数失败。
指定的窗口数据是在缓存中保存的，因此在调用SetWindowLong之后再调用SetWindowPos函数才O SetWindowLong函数所作的改变生效。
如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程，则该窗日过程必须WindowProc回调函数说明部分指定的指导行一致。
如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消息的和值，应在此后立即返回TRUE。否则，如果又调用了其他函数而使对话框过程接收到一个窗口消息，套的窗口可能消息可能改写使用DWL_MSGRESULT设定的返回值。
可以使用带GWL_WNDPROC索引值的SetWindowLohg函数创建一个窗口类的子类，该窗口类是用于创建该窗口的类。一个应用程序可以一个系统类为子类，但是不能以一个其他进程产生的窗口类为于类。
SetWindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类。从而使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须通过调用CallWindowProc函数向前窗口传递未被新窗口处理的消息。允许应用程序创建一个窗口过程链。可以通过对RegisterClassEx函数中使用的WNDCLASSEX结构的chWndExtra单元指定一个非零值来保留额外窗口内存。
不能通过调用带GWL_HWNDPARENT索引值的SetWindowLong的函数来改变子窗口的父窗口。应使用SetParent函数。
WindowsCE：nlndex参数必须是4个字节的倍数；不支持Unaligned access。
不支持下列nlndex参数值：
GWL_HINSTANCE；GWL_HWNDPARENT;GWL_USERDATA
WindowsCE2.0版支持在索引参数中的DWL_DLGPROC值，但是WindowsCE1.0不支持。

### 速查

Windows NT：3.1以上版本；Windows：95以上版本；Windows CE：1.0以上版本：库文件：user32.lib；
Unicode;在Windows NT上实现为Unicode和ANSI两种版本。