2017-08-26 16 views
0

私はプログラムを作成しようとしています。これは透明な背景に画面の中央に十字線を配置します。配置されている座標が正しいにもかかわらず、常にオフセットで描画されます。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

誰もこの問題に遭遇したことはありますか?

答えて

1

これは、SystemInformation.VirtualScreenClientRectangleに置き換えることで修正できます。以下のコードを参照してください。 ClientRectangleは、ウィンドウのドロアブルの境界を返します。

 int x = (ClientRectangle.Width/2) - (width/2); 
     int y = (ClientRectangle.Height/2) - (height/2); 
+0

ありがとう! それは完璧に機能し、私はとても混乱していました。 –

+0

丸め誤差(整数除算)を防ぐため、より正確な実装は 'int x =(ClientRectangle.Width - width)/ 2;' –

関連する問題