相关疑难解决方法(0)

确定在任何监视器上是否可以看到打开的WPF窗口

有没有办法确定在任何桌面连接的监视器中当前是否可以看到打开的WPF窗口?通过可见我的意思是窗口的边界矩形与任何监视器的桌面矩形相交.

我需要此功能来确定是否需要重新定位窗口,因为监视器配置(工作区域边界,监视器计数)在应用程序重新启动(保存窗口位置)之间发生了变化.

我已经提出了下面的代码,它似乎工作,但它有几个问题:

  1. 我需要引用windows窗体.
  2. 我需要桌面的DPI设置,并将窗体实际像素转换为WPF虚拟像素.
  3. 我需要一个已经渲染来执行转换的实际Visual实例.

您是否知道解决上述部分或全部3个问题的解决方案?

using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;

internal static class Desktop
{
    private static Size dpiFactor = new Size(1.0, 1.0);
    private static bool isInitialized;

    public static IEnumerable<Rect> WorkingAreas
    {
        get
        {
            return
                Screen.AllScreens.Select(
                    screen =>
                    new Rect(
                        screen.WorkingArea.Left * dpiFactor.Width,
                        screen.WorkingArea.Top * dpiFactor.Height,
                        screen.WorkingArea.Width * dpiFactor.Width,
                        screen.WorkingArea.Height * dpiFactor.Height));
        }
    }

    public static void TryInitialize(Visual visual)
    {
        if (isInitialized)
        {
            return;
        }

        var ps = PresentationSource.FromVisual(visual);
        if (ps == null) …
Run Code Online (Sandbox Code Playgroud)

wpf desktop interop dpi

7
推荐指数
1
解决办法
4618
查看次数

5
推荐指数
1
解决办法
5998
查看次数

vb.net确定屏幕

是否可以确定表单所在的屏幕?不是位置或大小!

我用了

Dim myScreens() As Screen = Screen.AllScreens

Me.Left = (myScreens(0).WorkingArea.Width - Me.Size.Width) / 2
Me.Top = (myScreens(0).WorkingArea.Height - Me.Size.Height) / 2
Run Code Online (Sandbox Code Playgroud)

提出表格.当用户将表单重定位到另一个屏幕时,我想保存该新屏幕的位置!

vb.net screen winforms

3
推荐指数
1
解决办法
5465
查看次数

标签 统计

screen ×2

winforms ×2

c# ×1

desktop ×1

dpi ×1

interop ×1

vb.net ×1

wpf ×1