私はプログラムを作成しようとしています。これは透明な背景に画面の中央に十字線を配置します。配置されている座標が正しいにもかかわらず、常にオフセットで描画されます。C#winformsは正しい画面の高さと幅であっても画面の真ん中に塗りつぶすことができません
十字線を描画する方法:
public void drawSquareCrosshair(Graphics gfx, Color color) {
SolidBrush lightChrosshairColor = new SolidBrush(color);
SolidBrush transparentColor = new SolidBrush(Color.Fuchsia);
// Crosshair Bounds
int width = 20;
int height = 20;
int x = (SystemInformation.VirtualScreen.Width/2)- (width/2);
int y = (SystemInformation.VirtualScreen.Height/2) - (height/2);
Console.WriteLine("X: " + x);
Console.WriteLine("Y: " + y);
gfx.FillRectangle(lightChrosshairColor, x, y, width, height);
}
ロジックは画面の幅を2で割って、2で割った十字線の幅によってminussedされていること、です。高さも同じです。私はフォーム内のすべての側面に固定されているパネル上にグラフィックスを作成するようにグラフィックスオブジェクトを設定しましたが、フォームのようにパネルの高さと幅はまだ1920x1080です。最大化するフォームを設定する方法は、form.FormBorderStyle = FormBorderStyle.None;
とform.WindowState = FormWindowState.Maximized;
です。ただし、十字線がまだ画面の中央に似ている座標に配置されているため、そうではないようですX:960、Y:540、1920x1080画面)。私は、写真のスクリーンの中央に十字線としてデスクトップの背景を作成しました(画像も1920x1080です)。ここにその外観があります: The square is the crosshair painted by my application, the red cross is the wallpaper
誰もこの問題に遭遇したことはありますか?
ありがとう! それは完璧に機能し、私はとても混乱していました。 –
丸め誤差(整数除算)を防ぐため、より正確な実装は 'int x =(ClientRectangle.Width - width)/ 2;' –