强制Winform程序以96dpi运行

本文关键字:96dpi 运行 程序 Winform 强制 | 更新日期: 2023-09-27 18:25:19

我目前有一个winform应用程序,它相对严重依赖于读取鼠标点击点。这是一个视频应用程序,允许用户点击来自网络摄像头的传入视频源,在上面划线并做其他事情。这个问题的重要部分是画线——一个简单的例子是,如果他们点击视频源上的某个地方,它会在鼠标点上立即在整个图片上画一条水平线。

这在96dpi上可以完美地工作,但当窗口缩放到125%缩放(控制面板''所有控制面板项目''显示->中等-125%),将其缩放到120 dpi时,一切都会发生变化。突然,应用程序读取到鼠标被点击的位置比实际位置要远得多

我所做的只是在鼠标点击时拖动鼠标的确切位置。它就像一样简单

                using (Graphics g = Graphics.FromImage(tmpImage))
            {
                g.DrawLine(new Pen(lineColor, lineWidth),
                           new Point(0, e.Location.X), new Point(tmpImage.Width,
                           e.Location.Y));
            }

在96dpi中,它精确地在鼠标上绘制。在120dpi时,它在鼠标以南绘制了相当多的图形。这对我来说是个大问题。

有没有什么方法可以让我的应用程序始终以96dpi运行,或者其他一些解决方案可以让应用程序在120dpi以上的情况下正常工作?

谢谢!

强制Winform程序以96dpi运行

为了强制应用程序以96 DPI运行,请将其写入Form1_Load:

        Graphics g = this.CreateGraphics();
        if (g.DpiX != 96)
        {
            MessageBox.Show("Your message.");
            this.Close();
        }

查看AutoScaleMode属性。这正是你所需要的。

默认情况下,AutoScaleMode设置为AutoScaleMode.Font,通常在*.designer.cs中将其更改为AutoScaleMode.None以不进行缩放,或者您可以将AutoScaleMode.DpiAutoScaleDimensions 一起使用

希望这能帮助