我正在尝试编写一个程序,它会在透明背景上的屏幕中间放置一个十字准线,但是十字准线将始终以偏移量绘制,即使它放置的坐标是正确的。
绘制十字准线的方法:
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
之前有没有人遇到过这个问题?
答案 0 :(得分:1)
可以使用BotController@edit
替换SystemInformation.VirtualScreen
来解决此问题,请参阅以下代码。 ClientRectangle返回窗口的drawable边界。
ClientRectangle