c – 如何确定窗口是否处于屏幕外?
在
Windows XP及以上版本中,给定了一个窗口句柄(HWND),如何判断窗口位置和大小是否离开窗口不可退避?例如,如果标题栏可用于光标,则可以将窗口拖回屏幕.我需要发现窗口是否实际上是可见的或至少可用于用户.我想我还需要知道如何检测和响应分辨率的变化以及如何处理多个显示器.这似乎是一个相当大的事情.我正在使用C和常规的SDK,所以请限制您的答案,而不是调用C#或类似的平台.
解决方法
Windows使得在主监视器上确定用户工作区域的大小变得相对简单(即,屏幕的区域不被任务栏遮蔽).调用
SystemParametersInfo 函数并为第一个参数(uiAction)指定SPI_GETWORKAREA标志. pvParam参数应指向将在虚拟屏幕坐标中接收工作区域坐标的
RECT structure.
一旦找到了描述工作区域的坐标,就可以将这些坐标与应用程序窗口的当前位置进行比较,以确定它是否位于这些界限之内. 支持多个显示器的愿望使事情稍微复杂一些. SystemParametersInfo的文档表明您需要调用 为此,您需要枚举用户连接到系统的所有监视器,并使用GetMonitorInfo检索每个监视器的工作区域. 有几个在互联网上可以找到的样本: > MSDN有一些Positioning Objects on a Multiple Display Setup的示例代码. 最后,你提到想要检测分辨率的变化.这比你想像的要简单得多您知道如果您完成任何Windows编程,操作系统与您的应用程序通信的主要方式是通过向 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |