C#winforms无法在屏幕中间绘画,即使屏幕高度和宽度正确

时间:2017-08-26 13:49:02

标签: c# winforms drawing

我正在尝试编写一个程序,它会在透明背景上的屏幕中间放置一个十字准线,但是十字准线将始终以偏移量绘制,即使它放置的坐标是正确的。

绘制十字准线的方法:

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。身高也一样。我已经将图形对象设置为在面板上创建图形,该面板锚定在窗体的所有边上,但面板的高度和宽度仍然是1920x1080,就像表单一样。我将表单设置为最大化的方式是使用form.FormBorderStyle = FormBorderStyle.None;form.WindowState = FormWindowState.Maximized;

然而情况似乎并非如此,因为十字准线仍然位于屏幕中间的坐标处(X:960,Y:540在1920x1080屏幕上)。我创建了一个桌面背景,作为在photoshop屏幕中间的十字准线(图像也是1920x1080)。以下是它的外观: The square is the crosshair painted by my application, the red cross is the wallpaper

之前有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

可以使用BotController@edit替换SystemInformation.VirtualScreen来解决此问题,请参阅以下代码。 ClientRectangle返回窗口的drawable边界。

ClientRectangle