首页 > 后端开发 > C++ > 如何使用SetWindowPos准确地将窗口定位在多个显示器上?

如何使用SetWindowPos准确地将窗口定位在多个显示器上?

Patricia Arquette
发布: 2025-01-30 18:36:09
原创
218 人浏览过

How Can I Accurately Position Windows Across Multiple Monitors Using SetWindowPos?

>精确的窗口放置在多个监视器上使用setWindowpos

>使用SetWindowPos有效地将窗口跨多个显示器定位,需要对系统显示配置和虚拟屏幕概念有细微的理解。

理解系统显示和虚拟屏幕

系统显示配置:

主监视器的原点是(0,0)。 次级监视器具有负X坐标(左为左)或正X坐标(主要的右侧)。

>

虚拟屏幕:>

这是一个概念显示,其中包含所有连接的监视器。它的起源是最左边监视器的左上角。 它的宽度是所有监视器宽度的总和,其高度是最高显示器的高度。

获取系统显示信息

>

类:> Screen课程提供检索重要屏幕信息的方法:>

Screen:标识包含给定窗口(hwnd)的屏幕。

>
  • :返回包含指定矩形的屏幕的边界。Screen.FromHandle(hwnd)>
  • :检索屏幕的设备名称,用于图形上下文创建。 Screen.GetBounds(rect)
  • 利用本机Win32函数:Screen.DeviceName>
  • 这些功能提供了用于监视识别的替代方法:

:返回与窗口关联的监视器句柄。

>

:返回给定点的监视器句柄。
    >
  • MonitorFromWindow:返回给定矩形的监视器句柄。
  • >用MonitorFromPoint定位窗口,并监视坐标
  • >使用MonitorFromRect>将窗口放在特定的显示器上,请按照以下步骤:
使用上述方法,

SetWindowPos识别目标监视器:

获取所需监视器的

手柄。 SetWindowPos

    >
  1. >计算虚拟屏幕坐标:根据监视器位置相对于主监视器,调整窗口的X坐标。 减去主要监测器的总宽度,以减去主要监视器左侧的监视器,并添加前面显示器的总宽度,而右侧的监测器的总宽度为右侧。

    > hMonitor

    使用
  2. >在 call中使用计算的虚拟屏幕坐标:

    >

    <code class="language-c++">SetWindowPos(hwnd, hWndInsertAfter, x, y, cx, cy, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);</code>
    登录后复制

>通过仔细考虑系统的显示布置并采用这些技术,您可以使用SetWindowPos

以上是如何使用SetWindowPos准确地将窗口定位在多个显示器上?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板