ShowOwnedPopups-显示或隐藏指定窗口拥有的所有弹出窗口

平台 SDK: Windows 用户接口

ShowOwnedPopups

ShowOwnedPopups函数显示或隐藏指定窗口拥有的所有弹出窗口。

BOOL ShowOwnedPopups(
  HWND hWnd,  // 窗口句柄
  BOOL fShow  // 窗口可视性
);

参数

  • hWnd

  • [in] 拥有要显示或隐藏弹出窗口的窗口句柄。

  • fShow

  • [in] 指定是否显示或隐藏弹出窗口。 如果此参数为TRUE,则会显示所有隐藏的弹出窗口。 如果此参数为FALSE,则隐藏所有可见的弹出窗口。

返回值

如果函数成功,返回值为非零。

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

备注

ShowOwnedPopups仅显示先前调用ShowOwnedPopups时隐藏的窗口。 例如,如果使用ShowWindow函数隐藏弹出窗口,则随后调用ShowOwnedPopups并将fShow参数设置为TRUE不会导致窗口显示。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


SetWindowText-更改指定窗口的标题栏(如果有)的文本

平台 SDK: Windows 用户接口

SetWindowText

SetWindowText函数更改指定窗口的标题栏(如果有)的文本。 如果指定的窗口是控件,则控件的文本会发生更改。 但是,SetWindowText不能更改另一个应用程序中的控件的文本。

BOOL SetWindowText(
  HWND hWnd,         // 窗口或控制句柄
  LPCTSTR lpString   // 标题或文字
);

参数

  • hWnd

  • [in] 要更改文本的窗口或控件句柄。

  • lpString

  • [in] 指向以空字符结尾的字符串作为新标题或控制文本的指针。

返回值

如果函数成功,返回值为非零。

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

备注

如果目标窗口由当前进程拥有,则SetWindowText将导致WM_SETTEXT消息发送到指定的窗口或控件。 如果控件是使用WS_CAPTION样式创建的列表框控件,但是,SetWindowText设置控件的文本,而不是列表框条目。

要在另一个进程中设置控件的文本,请直接发送WM_SETTEXT消息,而不是调用SetWindowText。

SetWindowText函数不扩展制表符(ASCII代码0x09)。 选项卡字符显示为竖线(|)字符。

Windows 95/98/Me: SetWindowTextW由Microsoft Layer for Unicode支持。 要使用它,必须将某些文件添加到应用程序中,如Windows 95/98 / Me系统上的Microsoft Layer for Unicode所述。

示例代码

有关示例,请参阅发送消息。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.

  Unicode: 在Windows NT/2000/XP上作为Unicode和ANSI版本实现。 Microsoft层还支持Unicode。


SetWindowPos-更改子级,弹出窗口或顶级窗口的大小,位置和Z顺序

平台 SDK: Windows 用户接口

SetWindowPos

SetWindowPos函数更改子级,弹出窗口或顶级窗口的大小,位置和Z顺序。 子窗口,弹出窗口和顶层窗口根据其在屏幕上的外观进行排序。 最顶端的窗口接收到最高级别,并且是Z顺序中的第一个窗口。

BOOL SetWindowPos(
  HWND hWnd,             // 窗口句柄
  HWND hWndInsertAfter,  // 插入位置句柄
  int X,                 // 水平位置
  int Y,                 // 垂直位置
  int cx,                // 宽度
  int cy,                // 高度
  UINT uFlags            // 窗口定位选项
);

参数

  • hWnd

  • [in] 窗口句柄。

  • hWndInsertAfter

  • [in] 按照Z顺序操作窗口以在定位窗口之前。 该参数必须是窗口句柄或以下值之一。

    含义
    HWND_BOTTOM将窗口放在Z顺序的底部。 如果hWnd参数标识最上面的窗口,则窗口失去其最高层状态,并放置在所有其他窗口的底部。
    HWND_NOTOPMOST将窗口放在所有非最顶层窗口的上方(即所有最顶层窗口的后面)。 如果窗口已经是非最高窗口,则此标志无效。
    HWND_TOP将窗口放在Z顺序的顶部。
    HWND_TOPMOST将窗口放置在所有非最顶层窗口的上方。 窗口保持最高位置,即使它被禁用。


    有关如何使用此参数的更多信息,请参阅以下备注部分。

  • X

  • [in] 在客户端坐标中指定窗口左侧的新位置。

  • Y

  • [in] 在客户端坐标中指定窗口顶部的新位置。

  • cx

  • [in] 指定窗口的新宽度(以像素为单位)。

  • cy

  • [in] 指定窗口的新高度,以像素为单位。

  • uFlags

  • [in] 指定窗口大小和定位标志。 该参数可以是以下值的组合。

    含义
    SWP_ASYNCWINDOWPOS如果调用线程和拥有窗口的线程连接到不同的输入队列,系统会将请求发送到拥有该窗口的线程。 这可以防止调用线程在其他线程处理请求时阻止其执行。
    SWP_DEFERERASE防止生成WM_SYNCPAINT消息。
    SWP_DRAWFRAME在窗口周围绘制一个框架(在窗口的类描述中定义)。
    SWP_FRAMECHANGED应用使用SetWindowLong函数设置的新框架样式。

    即使窗口大小未被更改,也会将WM_NCCALCSIZE消息发送到窗口。 如果没有指定该标志,WM_NCCALCSIZE仅在窗口大小发生变化时才发送。

    SWP_HIDEWINDOW隐藏窗口。
    SWP_NOACTIVATE不激活窗口。 如果此标志未设置,则窗口被激活并移动到最顶层或非最顶层组的顶部(取决于hWndInsertAfter参数的设置)。
    SWP_NOCOPYBITS丢弃客户区的全部内容。 如果未指定此标志,则在窗口大小或重新定位后,客户区的有效内容将被保存并复制回客户区。
    SWP_NOMOVE保留当前位置(忽略X和Y参数)。
    SWP_NOOWNERZORDER不以Z顺序更改所有者窗口的位置。
    SWP_NOREDRAW不重绘更改。 如果设置了此标志,则不会发生任何类型的重新绘制。 这适用于客户端区域,非客户端区域(包括标题栏和滚动条)以及作为移动窗口结果的父窗口的任何部分。 设置此标志时,应用程序必须明确地使窗口和父窗口的任何需要重绘的部分无效或重绘。
    SWP_NOREPOSITION与SWP_NOOWNERZORDER标志相同。
    SWP_NOSENDCHANGING防止窗口收到WM_WINDOWPOSCHANGING消息。
    SWP_NOSIZE保留当前尺寸(忽略cx和cy参数)。
    SWP_NOZORDER保留当前的Z顺序(忽略hWndInsertAfter参数)。
    SWP_SHOWWINDOW显示窗口。


返回值

如果函数成功,返回值为非零。

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

备注

如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标志,则无法移动或调整窗口大小。

如果使用SetWindowLong更改了某些窗口数据,则必须调用SetWindowPos才能使更改生效。 为uFlags使用以下组合:SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |SWP_FRAMECHANGED。

通过将hWndInsertAfter参数设置为HWND_TOPMOST并确保未设置SWP_NOZORDER标志,或者通过将窗口的位置设置为Z顺序,以使窗口位于任何现有的最顶层窗口之上,可以使窗口成为最上层窗口。 当一个非最顶层的窗口成为最顶层时,它拥有的窗口也成为顶层。 但是,它的所有者没有改变。

如果既没有指定SWP_NOACTIVATE也没有指定SWP_NOZORDER标志(也就是说,当应用程序请求同时激活一个窗口并且它的Z顺序位置发生了变化时),hWndInsertAfter中指定的值仅在以下情况下使用:

  • hWndInsertAfter中没有指定HWND_TOPMOST和HWND_NOTOPMOST标志。

  • 由hWnd标识的窗口不是活动窗口。

一个应用程序不能激活一个不活动的窗口,也不会将它带到Z命令的顶部。 应用程序可以在没有限制的情况下以Z顺序更改激活窗口的位置,或者它可以激活一个窗口,然后将其移动到最顶层窗口或非最顶层窗口的顶部。

如果最上面的窗口重新定位到Z顺序的底部(HWND_BOTTOM)或任何非最上面的窗口之后,它不再是最上面的窗口。 当最顶层窗口不是最高层时,它的所有者和拥有的窗口也会成为非最高层窗口。

非最顶层的窗口可以拥有最顶层的窗口,但是不会出现相反的情况。 最高层窗口拥有的任何窗口(例如对话框)本身都是最高层窗口,以确保所有拥有的窗口保持在其所有者之上。

如果应用程序不在前台,并且应该在前台,它必须调用SetForegroundWindow函数。

示例代码

有关示例,请参阅初始化对话框。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


SetWindowPlacement-设置显示状态以及指定窗口的恢复,最小化和最大化位置

平台 SDK: Windows 用户接口

SetWindowPlacement

SetWindowPlacement函数设置显示状态以及指定窗口的恢复,最小化和最大化位置。

BOOL SetWindowPlacement(
  HWND hWnd,                      // 窗口句柄
  CONST WINDOWPLACEMENT *lpwndpl  // 位置数据
);

参数

  • hWnd

  • [in] 窗口句柄。

  • lpwndpl

  • [in] 指向WINDOWPLACEMENT结构的指针,指定新的显示状态和窗口位置。

    在调用SetWindowPlacement之前,将WINDOWPLACEMENT结构的长度成员设置为sizeof(WINDOWPLACEMENT)。 如果lpwndpl-> length设置不正确,SetWindowPlacement将失败。

返回值

如果函数成功,返回值为非零。

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

备注

如果在WINDOWPLACEMENT中指定的信息会导致窗口完全离开屏幕,系统将自动调整坐标,以便窗口可见,同时考虑到屏幕分辨率和多个显示器配置的变化。

WINDOWPLACEMENT的长度成员必须设置为sizeof(WINDOWPLACEMENT)。 如果该成员设置不正确,该函数返回FALSE。 有关正确使用窗口放置坐标的其他说明,请参阅WINDOWPLACEMENT。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


SetWindowLong-更改指定窗口的属性

平台 SDK: Windows 用户接口

SetWindowLong

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

注意 该函数已被SetWindowLongPtr函数取代。 要编写与32位和64位版本的Windows兼容的代码,请使用SetWindowLongPtr。

LONG SetWindowLong(
  HWND hWnd,       // 窗口句柄
  int nIndex,      // 要设置的值的偏移量
  LONG dwNewLong   // 新值
);

参数

  • hWnd

  • [in] 窗口句柄,间接处理窗口所属的类。

    Windows 95/98/Me: 如果由hWnd参数指定的窗口不属于与调用线程相同的进程,SetWindowLong函数可能会失败。

  • nIndex

  • [in] 指定要设置的值的基于零的偏移量。 有效值的范围为零到额外窗口内存的字节数减去整数的大小。 要设置任何其他值,请指定以下值之一。

    动作
    GWL_EXSTYLE设置新的扩展窗口样式。 有关更多信息,请参阅CreateWindowEx。
    GWL_STYLE设置新的窗口样式。
    GWL_WNDPROC为窗口过程设置一个新地址。

    Windows NT/2000/XP: 如果窗口不属于调用线程所在的进程,则不能更改此属性。

    GWL_HINSTANCE设置新的应用程序实例句柄。
    GWL_ID设置窗口的新标识符。
    GWL_USERDATA设置与窗口关联的用户数据。 此数据旨在供创建该窗口的应用程序使用。 它的值最初为零。


    当hWnd参数标识对话框时,以下值也可用。

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



  • dwNewLong

  • [in] 指定替换值。

返回值

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

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

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

备注

某些窗口数据被缓存,所以使用SetWindowLong所做的更改只有在调用SetWindowPos函数后才会生效。 特别是,如果更改任何框架样式,则必须使用SWP_FRAMECHANGED标志调用SetWindowPos,才能正确更新缓存。

如果使用带有GWL_WNDPROC索引的SetWindowLong替换窗口过程,则窗口过程必须符合WindowProc回调函数描述中指定的准则。

如果使用SetWindowLong和DWL_MSGRESULT索引来设置由对话框过程处理的消息的返回值,则应在之后直接返回TRUE。 否则,如果调用导致对话过程接收窗口消息的任何函数,则嵌套窗口消息可能会覆盖使用DWL_MSGRESULT设置的返回值。

使用GWL_WNDPROC索引调用SetWindowLong将创建用于创建窗口的窗口类的子类。 应用程序可以继承一个系统类,但不应该继承由另一个进程创建的窗口类。 SetWindowLong函数通过更改与特定窗口类关联的窗口过程来创建窗口子类,导致系统调用新窗口过程而不是先前窗口过程。 应用程序必须通过调用CallWindowProc将任何未由新窗口过程处理的消息传递给上一个窗口过程。 这允许应用程序创建一系列窗口过程。

通过在RegisterClassEx函数使用的WNDCLASSEX结构的cbWndExtra成员中指定一个非零值来保留额外的窗口内存。

您不得使用GWL_HWNDPARENT索引调用SetWindowLong以更改子窗口的父级。 而是使用SetParent函数。

如果窗口的类样式为CS_CLASSDC或CS_OWNDC,则不要设置扩展窗口样式WS_EX_COMPOSITED或WS_EX_LAYERED。

Windows 95/98/Me: SetWindowLongW由Microsoft Layer for Unicode支持。 SetWindowLongA也支持在所有Windows操作系统中提供更一致的行为。 要使用这些版本,您必须将某些文件添加到您的应用程序中,如Windows 95/98 / Me系统上的Microsoft Layer for Unicode所述。

示例代码

有关示例,请参阅子类化窗口。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.

  Unicode: 在Windows NT/2000/XP上作为Unicode和ANSI版本实现。 Microsoft层还支持Unicode。