c#控制在屏幕上的绝对位置

本文关键字:位置 控制 屏幕 | 更新日期: 2023-09-27 18:28:53

我正在尝试获取控件在屏幕上的绝对位置。我用了两台显示器,结果并不是很好。。。

我正在做的是打开另一个表单来捕获图像,然后将此图像传递到主表单并关闭捕获表单。然后我希望主表单出现在捕获图片的同一位置。作为一个例子,为了获得我想要做的事情的要点,在Windows上打开Snipping Tool并捕获一个snip。然后,该窗口将出现在拍摄图像的位置。

这是我目前使用的代码:

Location = new Point(Cursor.Position.X - CaptureBox.Width - CapturePanel.Location.X - CaptureBox.Location.X - 8, Cursor.Position.Y - CaptureBox.Height - CapturePanel.Location.Y - CaptureBox.Location.Y - 30);

CapturePanel包含用于存储图片的CaptureBox控件。我还从X位置取8,从Y位置取30,以补偿表单的边框和标题栏,但唯一的问题是,一些计算机将使用不同的窗口样式,这些数字会发生变化。

如果有一种方法可以用来获取窗口的边框和标题宽度/高度,那就太好了。

编辑

对此的解决方案是:

Location = new Point(
    Cursor.Position.X -
    CaptureBox.Width -
    CapturePanel.Location.X -
    CaptureBox.Location.X - 
    SystemInformation.HorizontalResizeBorderThickness,
    Cursor.Position.Y -
    CaptureBox.Height -
    CapturePanel.Location.Y -
    CaptureBox.Location.Y -
    SystemInformation.CaptionHeight -
    SystemInformation.VerticalResizeBorderThickness
);

在King King的帮助下向我指出系统信息。

c#控制在屏幕上的绝对位置

要获得Window captionHeight,您可以尝试以下操作:

int captionHeight = yourForm.PointToScreen(Point.Empty).Y - yourForm.Top;    

要获得表单边框的Width,您可以尝试以下操作:

int borderWidth = yourForm.PointToScreen(Point.Empty).X - yourForm.Left;

此外,您可能需要查看SystemInformation.CaptionHeight的默认字幕高度。

如果您想在屏幕坐标中获得CaptureBox的位置,可以使用PointToScreen方法:

Point loc = CaptureBox.PointToScreen(Point.Empty);