0

私は現在、マウス クリック ポイントの読み取りに比較的大きく依存する winform アプリケーションを使用しています。これは、ユーザーが Web カメラからの受信ビデオ フィードをクリックして線を描画したり、他のことを実行できるようにするビデオ アプリケーションです。この質問の重要な部分は線を引くことです。簡単な例として、ビデオ フィードのどこかをクリックすると、マウスのポイントで画像全体に水平線が即座に描画されます。

これは 96dpi では問題なく動作しますが、Windows が 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.csAutoScaleMode.NoneAutoScaleMode.DpiAutoScaleDimensions

お役に立てれば

于 2013-07-29T19:59:02.970 に答える