ScreenToClient-将屏幕上指定点的屏幕坐标转换为客户区坐标

平台 SDK: Windows GDI

ScreenToClient

ScreenToClient函数将屏幕上指定点的屏幕坐标转换为客户区坐标。

BOOL ScreenToClient(
  HWND hWnd,        // 窗口句柄
  LPPOINT lpPoint   // 屏幕坐标
);

参数

  • hWnd

  • [in] 客户区将用于转换的窗口句柄。

  • lpPoint

  • [in] 指向指定要转换的屏幕坐标的POINT结构的指针。

返回值

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

如果函数失败,返回值为零。

Windows NT/2000/XP: 要获得扩展的错误信息,请调用GetLastError。

备注

该函数使用由hWnd参数标识的窗口和POINT结构中给出的屏幕坐标来计算客户端坐标。 然后用客户坐标替换屏幕坐标。 新坐标相对于指定窗口客户区的左上角。

ScreenToClient函数假定指定的点位于屏幕坐标中。

所有坐标均以设备为单位。

在镜像情况下,即从左至右布局更改为从右至左布局时,请勿使用ScreenToClient。 相反,使用MapWindowPoints。 有关更多信息,请参阅窗口布局和镜像。

要求

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

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

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


ReleaseCapture-从当前线程的窗口释放鼠标捕获并恢复正常的鼠标输入处理

平台 SDK: Windows 用户接口

ReleaseCapture

ReleaseCapture函数从当前线程的窗口释放鼠标捕获并恢复正常的鼠标输入处理。 捕获鼠标的窗口接收所有鼠标输入,而不管光标的位置如何,除非在另一个线程的窗口中单击鼠标按钮时鼠标按钮被点击。

BOOL ReleaseCapture(VOID);

参数

该函数没有参数。

返回值

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

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

备注

调用SetCapture函数后,应用程序调用该函数。

Windows 95/98/Me: 调用ReleaseCapture会导致失去鼠标捕获的窗口收到WM_CAPTURECHANGED消息。

示例代码

有关示例,请参见使用鼠标绘制线条。

要求

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

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

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


OpenIcon-将最小化(标志性)窗口恢复到之前的大小和位置; 然后激活窗口

平台 SDK: Windows 用户接口

OpenIcon

OpenIcon函数将最小化(标志性)窗口恢复到之前的大小和位置; 然后激活窗口。

BOOL OpenIcon(
  HWND hWnd   // 窗口句柄
);

参数

  • hWnd

  • [in] 要恢复和激活的窗口句柄。

返回值

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

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

备注

OpenIcon发送一个WM_QUERYOPEN消息给给定的窗口。

要求

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

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

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


RedrawWindow-更新窗口客户区中指定的矩形或区域

平台 SDK: Windows GDI

RedrawWindow

RedrawWindow函数更新窗口客户区中指定的矩形或区域。

BOOL RedrawWindow(
  HWND hWnd,               // 窗口句柄
  CONST RECT *lprcUpdate,  // 更新矩形
  HRGN hrgnUpdate,         // 要更新的区域句柄
  UINT flags               // 重绘标志数组
);

参数

  • hWnd

  • [in] 要重绘的窗口句柄。 如果此参数为NULL,则更新桌面窗口。

  • lprcUpdate

  • [in] 指向包含更新矩形的坐标(以设备单位表示)的RECT结构的指针。 如果hrgnUpdate参数标识区域,则此参数将被忽略。

  • hrgnUpdate

  • [in] 更新区域句柄。 如果hrgnUpdate和lprcUpdate参数都为NULL,则将整个客户区添加到更新区域。

  • flags

  • [in] 指定一个或多个重绘标志。 该参数可用于使窗口失效或验证,控制重绘以及控制受RedrawWindow影响的窗口。

    以下标志用于使窗口无效。

    标志(无效)描述
    RDW_ERASE窗口重新绘制时导致窗口收到WM_ERASEBKGND消息。 RDW_INVALIDATE标志也必须指定; 否则,RDW_ERASE不起作用。
    RDW_FRAME导致与更新区域相交的窗口的非客户区域的任何部分接收WM_NCPAINT消息。 RDW_INVALIDATE标志也必须指定; 否则,RDW_FRAME不起作用。 除非指定了RDW_UPDATENOW或RDW_ERASENOW,否则通常在执行RedrawWindow期间不会发送WM_NCPAINT消息。
    RDW_INTERNALPAINT不管窗口的任何部分是否无效,都会导致WM_PAINT消息被发布到窗口。
    RDW_INVALIDATE使lprcUpdate或hrgnUpdate无效(只有一个可能不是NULL)。 如果两者均为NULL,则整个窗口将失效。


    以下标志用于验证窗口。

    标志(有效)描述
    RDW_NOERASE禁止任何挂起的WM_ERASEBKGND消息。
    RDW_NOFRAME禁止任何挂起的WM_NCPAINT消息。 该标志必须与RDW_VALIDATE一起使用,并且通常与RDW_NOCHILDREN一起使用。 应小心使用RDW_NOFRAME,因为它可能会导致部分窗口涂漆不当。
    RDW_NOINTERNALPAINT禁止任何挂起的内部WM_PAINT消息。 此标志不会影响由非NULL更新区域产生的WM_PAINT消息。
    RDW_VALIDATE验证lprcUpdate或hrgnUpdate(只有一个可能不是NULL)。 如果两者都是NULL,则整个窗口都会被验证。 此标志不影响内部WM_PAINT消息。


    以下标志控制重新绘制的时间。 除非指定了其中一个标志,否则RedrawWindow不会重新绘制。

    标志描述
    RDW_ERASENOW如果需要,导致受影响的窗口(如RDW_ALLCHILDREN和RDW_NOCHILDREN标志所指定的)在函数返回之前接收WM_NCPAINT和WM_ERASEBKGND消息。 平时收到WM_PAINT消息。
    RDW_UPDATENOW如果需要,导致受影响的窗口(如RDW_ALLCHILDREN和RDW_NOCHILDREN标志所指定的)在函数返回之前接收WM_NCPAINT,WM_ERASEBKGND和WM_PAINT消息。


    默认情况下,受RedrawWindow影响的窗口取决于指定的窗口是否具有WS_CLIPCHILDREN风格。 子窗口不是WS_CLIPCHILDREN样式不受影响; 非WS_CLIPCHILDREN窗口被递归验证或无效,直到遇到WS_CLIPCHILDREN窗口。 以下标志控制哪些窗口受到RedrawWindow函数的影响。

    标志描述
    RDW_ALLCHILDREN包括子窗户,如果有的话,在重新粉刷操作。
    RDW_NOCHILDREN排除重新粉刷操作中的子窗口(如果有的话)。



返回值

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

如果函数失败,返回值为零。

Windows NT/2000/XP: 要获得扩展的错误信息,请调用GetLastError。

备注

当使用RedrawWindow使部分桌面窗口失效时,桌面窗口不会收到WM_PAINT消息。 为了重新绘制桌面,应用程序使用RDW_ERASE标志来生成WM_ERASEBKGND消息。

要求

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

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

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


PtInRect-确定指定的点是否位于指定的矩形内

平台 SDK: Windows GDI

PtInRect

PtInRect函数确定指定的点是否位于指定的矩形内。 如果一个点位于左侧或顶侧或位于所有四条边内,则该点位于矩形内。 右侧或底侧的一个点被认为是在矩形外部。

BOOL PtInRect(
  CONST RECT *lprc,  // 矩形
  POINT pt           // 点
);

参数

  • lprc

  • [in] 指向包含指定矩形的RECT结构的指针。

  • pt

  • [in] 指定包含指定点的POINT结构。

返回值

如果指定的点位于矩形内,则返回值不为零。

如果指定的点不在矩形内,则返回值为零。

备注

在调用PtInRect之前,矩形必须标准化。 也就是说,lprc.right必须大于lprc.left,而lprc.bottom必须大于lprc.top。 如果矩形未标准化,则矩形内永远不会考虑点。

因为应用程序可以为不同目的使用矩形,所以矩形函数不使用明确的度量单位。 相反,所有的矩形坐标和尺寸都以有符号的逻辑值给出。 映射模式和使用矩形的函数决定了度量单位。

示例代码

有关示例,请参阅使用矩形。

要求

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

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

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