0

我目前有一个相对依赖于读取鼠标点击点的 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 持续运行,或者使用其他解决方案使我的应用程序在 120+dpi 的情况下正常工作?

谢谢!

4

2 回答 2

1

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

        Graphics g = this.CreateGraphics();
        if (g.DpiX != 96)
        {
            MessageBox.Show("Your message.");
            this.Close();
        }
于 2013-08-10T17:02:21.773 回答
0

看看AutoScaleMode属性。这就是你需要的。

默认情况下AutoScaleMode设置为AutoScaleMode.Font通常在*.designer.cs更改AutoScaleMode.None为无缩放或您可以AutoScaleMode.Dpi使用AutoScaleDimensions

希望这可以帮助

于 2013-07-29T19:59:02.970 回答