首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板