win_wrap::common

Function set_window_long_ptr

Source
pub fn set_window_long_ptr(
    h_wnd: HWND,
    n_index: WINDOW_LONG_PTR_INDEX,
    new_long: isize,
) -> isize
Expand description

更改指定窗口的属性。 函数还会在额外窗口内存中的指定偏移量处设置值。 注意 若要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用 set_window_long_ptr。为 32 位 Windows 编译时, set_window_long_ptr 定义为对 set_window_long 函数的调用。 如果函数成功,则返回值是指定偏移量的上一个值。 如果函数失败,则返回值为零。要获得更多的错误信息,请调用 get_last_error。 如果上一个值为零且函数成功,则返回值为零,但函数不清除最后一个错误信息。若要确定成功或失败,请通过调用 0 的 set_last_error 清除最后一个错误信息,然后调用 set_window_long_ptr。函数失败将由返回值零和 get_last_error 结果指示为非零。 某些窗口数据会缓存,因此在调用 set_window_pos 函数之前,使用 set_window_long_ptr 所做的更改不会生效。 如果将 set_window_long_ptr 与 GWLP_WNDPROC 索引一起使用来替换窗口过程,则窗口过程必须符合 WindowProc 回调函数的说明中指定的准则。 如果使用 set_window_long_ptr和DWLP_MSGRESULT 索引来设置对话框过程处理的消息的返回值,则对话框过程应随后直接返回 TRUE 。否则,如果调用导致对话框过程接收窗口消息的任何函数,嵌套窗口消息可能会覆盖使用 DWLP_MSGRESULT 设置的返回值。 使用 GWLP_WNDPROC 索引调用 set_window_long_ptr 会创建用于创建窗口的窗口类的子类。应用程序可以子类化系统类,但不应子类化由另一个进程创建的窗口类。set_window_long_ptr 函数通过更改与特定窗口类关联的窗口过程来创建窗口子类,导致系统调用新窗口过程而不是上一个窗口过程。应用程序必须通过调用 call_window_proc 将新窗口过程未处理的任何消息传递到上一个窗口过程。这允许应用程序创建窗口过程链。 通过在 与 register_class_ex 函数一起使用的 WNDCLASSEX 结构的 cbWndExtra 成员中指定非零值来保留额外的窗口内存。 请勿使用 GWLP_HWNDPARENT 索引调用 set_window_long_ptr 来更改子窗口的父窗口。请改用 set_parent 函数。 如果窗口的类样式 为CS_CLASSDC 或 CS_PARENTDC,请不要将扩展窗口样式设置为 WS_EX_COMPOSITED 或 WS_EX_LAYERED。 调用 set_window_long_ptr 在进度栏上设置样式将重置其位置 h_wnd 窗口的句柄,以及窗口所属类的间接句柄。如果拥有由 h_wnd 参数指定的窗口的进程在 UIPI 层次结构中的进程特权高于调用线程所在的进程,则 set_window_long_ptr 函数将失败。 Windows XP/2000: 如果 h_wnd 参数指定的窗口不属于调用线程所在的进程,set_window_long_ptr 函数将失败。 n_index 要设置的值的从零开始的偏移量。有效值介于零到额外窗口内存的字节数之间,减去 LONG_PTR的大小。若要设置任何其他值,请指定以下值之一。 值 | 含义 GWL_EXSTYLE -20 | 设置新的 扩展窗口样式。 GWLP_HINSTANCE -6 | 设置新的应用程序实例句柄。 GWLP_ID -12 | 设置子窗口的新标识符。 该窗口不能是顶级窗口。 GWL_STYLE -16 | 设置新 窗口样式。 GWLP_USERDATA -21 | 设置与窗口关联的用户数据。 此数据供创建窗口的应用程序使用。 其值最初为零。 GWLP_WNDPROC -4 | 为窗口过程设置新地址。 当 hWnd 参数标识对话框时,以下值也可用。 值 | 含义 DWLP_DLGPROC DWLP_MSGRESULT + sizeof (LRESULT) | 设置指向对话框过程的新指针。 DWLP_MSGRESULT 0 | 设置对话框过程中处理的消息的返回值。 DWLP_USER DWLP_DLGPROC + sizeof (DLGPROC) | 设置应用程序专用的新额外信息,例如句柄或指针 new_long 替换值。