【问题标题】:What determines when a window will maximise onto an additional monitor?什么决定了一个窗口何时会最大化到另一个显示器上?
【发布时间】:2012-04-02 15:41:03
【问题描述】:

我一直致力于使用 P/Invoke(后续文章)为 Silverlight 5 提供多显示器支持。在玩的过程中,我注意到窗口大小和位置将决定我的两个显示器中的哪一个被最大化附加窗口.我继续玩(和你一样)并确定:

  • 我的笔记本电脑 (1280 x 800) 位于左侧,显示器 (1024 x 768) 位于右侧,公式为 Left = -(Width/2) + 1271
  • 左侧是我的显示器 (1024 x 768),右侧是笔记本电脑 (1280 x 800),公式为 Left = -(Width/2) + 1014
  • 左侧是我的显示器 (1024 x 768),右侧是笔记本电脑 (1280 x 800),公式为 Left = -(Width/2) - 11
  • 左侧是我的笔记本电脑 (1280 x 800),右侧是显示器 (1024 x 768),公式为 Left = -(Width/2) - 10

看起来应该有一个模式(常量 = 屏幕宽度 - 左侧的主屏幕宽度为 10,右侧的主屏幕宽度为常量 = -10),但这并不准确。我目前没有其他显示器可用,请检查。任何人都知道它应该是什么,或者这只是我的特定设置的人工制品?

(注意:这些是有限制的——它们不适用于 Left 或 Width 的所有值)

【问题讨论】:

    标签: winapi positioning silverlight-5.0 maximize-window


    【解决方案1】:

    此行为似乎与MonitorFromWindow 的行为一致。来自文档:

    MonitorFromWindow 函数检索与指定窗口的边界矩形相交面积最大的显示监视器的句柄。

    检查这是否与您的计算一致。应该是的。

    【讨论】:

    • 很接近但并不完全如此,除非描述缺少一些细节。如果是这种情况,那么将窗口推到第二个监视器(在 RHS 上)的 Left 和 Width 值应该给出(Width/2)+ Left =(RHS 监视器的第一个像素),例如左侧(主)显示器的宽度为 1280,宽度 = 400,左侧 = 1080,因为像素编号为 0-1279,因此 1280 是第一个)但它们实际上给出的值是((RHS 显示器的第一个像素) - 10)或在上述情况下为 1270。对于其他主要/次要监视器位置,类似(但不完全是 10 个)。
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多