Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保持宽屏显示器应用程序的适当纵横比?_C#_.net_Resolution_Screen Resolution_High Resolution - Fatal编程技术网

C# 如何保持宽屏显示器应用程序的适当纵横比?

C# 如何保持宽屏显示器应用程序的适当纵横比?,c#,.net,resolution,screen-resolution,high-resolution,C#,.net,Resolution,Screen Resolution,High Resolution,我有一个宽屏显示器,我想保持我的应用程序的纵横比,甚至处理可能设置的“错误”分辨率 例如,显示器可以显示分辨率为1920x1080的完美圆圈。 但当分辨率设置为1400x1050时,圆看起来像椭圆 我们的客户对此非常挑剔,要求确定并调整应用程序的大小,以显示具有任何分辨率和监视器的完美圆圈 所以,是否有可能以某种方式缩放应用程序并保持纵横比,以便在真实设备上以适当的比例显示它?获取窗口的高度,并将宽度缩放为高度的一部分,或者根据需要以其他方式缩放 void aspectRation(var w

我有一个宽屏显示器,我想保持我的应用程序的纵横比,甚至处理可能设置的“错误”分辨率

例如,显示器可以显示分辨率为1920x1080的完美圆圈。 但当分辨率设置为1400x1050时,圆看起来像椭圆

我们的客户对此非常挑剔,要求确定并调整应用程序的大小,以显示具有任何分辨率和监视器的完美圆圈


所以,是否有可能以某种方式缩放应用程序并保持纵横比,以便在真实设备上以适当的比例显示它?

获取窗口的高度,并将宽度缩放为高度的一部分,或者根据需要以其他方式缩放

void aspectRation(var width, var height){
    //Divide by 100 to get 1% of height, then multiply by (a number) to maintain ratio
    var newWidth = (height/100) * 80;

    //set the window size here
}

设置窗口大小将取决于您的应用程序。

您可以覆盖
窗体的
OnResize
事件,以保留其纵横比:

private static readonly Size MaxResolution = GetMaxResolution();
private static double AspectRatio = (double)MaxResolution.Width / MaxResolution.Height;
private readonly PointF Dpi;

public YourForm() // constructor
{
    Dpi = GetDpi();
    AspectRatio *= Dpi.X / Dpi.Y;
}

private PointF GetDpi()
{
    PointF dpi = PointF.Empty;
    using (Graphics g = CreateGraphics())
    {
        dpi.X = g.DpiX;
        dpi.Y = g.DpiY;
    }
    return dpi;
}

private static Size GetMaxResolution()
{
    var scope = new ManagementScope();
    var q = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution");

    using (var searcher = new ManagementObjectSearcher(scope, q))
    {
        var results = searcher.Get();
        int maxHResolution = 0;
        int maxVResolution = 0;

        foreach (var item in results)
        {
            if (item.GetPropertyValue("HorizontalResolution") == null)
                continue;
            int h = int.Parse(item["HorizontalResolution"].ToString());
            int v = int.Parse(item["VerticalResolution"].ToString());
            if (h > maxHResolution || v > maxVResolution)
            {
                maxHResolution = h;
                maxVResolution = v;
            }
        }
        return new Size(maxHResolution, maxVResolution);
    }
}

protected override void OnResize(EventArgs e)
{
    base.OnResize(e);
    int minWidth = Math.Min(Width, (int)(Height * AspectRatio));
    if (WindowState == FormWindowState.Normal)
        Size = new Size(minWidth, (int)(minWidth / AspectRatio));
}
编辑
假设最大屏幕分辨率反映了“正方形”要求,则可以获得所有屏幕分辨率,如所述和所示。你只需要找到它们的“最大值”


请注意,Windows通常没有实际的DPI值,我使用DPI只是比较水平DPI和垂直DPI。

什么是应用程序?它是一个
表单
?WinForms还是WPF?这是WinForms应用程序。但对于WPF,我也有同样的行为。windows不知道屏幕的物理尺寸,所以如果分辨率不匹配,你就无法检测到。@这听起来像是真的,但我希望有什么。我知道这个公式。我想确定如何缩放应用程序,以便在设置了“方形”分辨率的真实宽设备上正确显示它。显示器将自动以错误的比例显示“方形”分辨率。您肯定需要显示器和程序之间的交互才能实现这一点吗?是,听起来我必须知道真实的设备比例。使用屏幕密度(以每厘米/英寸像素为单位)和屏幕大小(以像素为单位)来计算屏幕大小(以米为单位),并相应地缩放应用程序这似乎解释了如何抓住两者,快速浏览:)您不想保留像素的纵横比,而是试图保留米的纵横比。我说的对吗?只要试着在宽屏显示器上设置分辨率1400x1050,并以表格的形式显示圆圈。它将显示为椭圆形,而设备将自动缩放比例。所以我们需要根据这个值来确定实际的设备大小和规模。Короче суть в том, что на широкоформатном мониторе квадратные разрешения экрана автоматически растягиваются. Заказчик хочет в противовес этому "стягивать" наше приложение, чтоб все смотрелось пропорционально в реальном физическом мире)