C# 强制Winform程序以96dpi运行?

C# 强制Winform程序以96dpi运行?,c#,winforms,mouseevent,dpi,C#,Winforms,Mouseevent,Dpi,我目前有一个winform应用程序,它相对严重地依赖于读取鼠标点击点。这是一个视频应用程序,允许用户点击来自网络摄像头的传入视频,并在其上画线和做其他事情。这个问题的重要部分是画线——一个简单的例子是,如果他们点击视频提要上的某个地方,它会在鼠标点处立即画一条横过整个图片的水平线 这在96dpi上可以完美地工作,但当windows缩放到125%缩放(控制面板\所有控制面板项目\显示->中等-125%),将其缩放到120dpi时,所有内容都将进入pot。突然,应用程序读取到鼠标被点击的位置比实际位

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

这在96dpi上可以完美地工作,但当windows缩放到125%缩放(控制面板\所有控制面板项目\显示->中等-125%),将其缩放到120dpi时,所有内容都将进入pot。突然,应用程序读取到鼠标被点击的位置比实际位置要远得多

我所做的就是在鼠标点击时拖动鼠标的准确位置。从字面上讲,这就像

                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的情况下正常工作

谢谢大家!

看看酒店。这就是你需要的

默认情况下,
AutoScaleMode
设置为
AutoScaleMode。Font
通常位于
*.designer.cs
中,将其更改为
AutoScaleMode。无
表示无缩放,或者您可以将
AutoScaleMode.Dpi
AutoScaleDimensions


希望这有助于

为了强制应用程序以96 DPI的速度运行,请将其写入Form1\u Load:

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

如果您需要真正的分辨率独立性和DPI独立性,我强烈推荐WPF。winforms的
X,Y
方法在处理这类事情时确实是有限的,你必须求助于各种可怕的黑客才能正常工作。你的变焦放大了图片吗?如果是,您可能必须“计算”缩放因子。不幸的是,我在Winform方面没有太多选项。这个应用程序已经完成,这是一个迟发现的bug(我真的没有解释!)@Alex-据我所知,图像似乎不会因windows dpi的增加而缩放。是的,请遵循@HighCore的建议。作为retina Macbook上的Windows用户,我可以告诉您,不遵守我的DPI设置的程序看起来绝对可怕。@GGati您可以创建此功能,在WPF中5分钟内单击鼠标时(以独立于分辨率的方式)添加一条水平线,而无需处理蹩脚的
e.Graphics
内容。然后,如果需要,可以通过
ElementHost
将其集成到现有的winforms应用程序中。让我知道,如果你需要一个WPF的例子,如何绘制鼠标点击线。