5

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

我正在做的是打开另一个表单来捕获图像,然后将此图像传递给主表单并关闭捕获表单。然后我希望主窗体出现在捕获图片的同一位置。要了解我正在尝试做的事情的要点,请在 Windows 上打开 Snipping Tool 并捕获一个片段。然后窗口将出现在拍摄图像的位置。

这是我用来执行此操作的当前代码:

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,从 te 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 向我指出 SystemInformation 的帮助下。

4

1 回答 1

7

To get the Height of your Window caption, you can try this:

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

To get the Width of the form border, you can try this:

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

Also you may want to look at the default caption height by SystemInformation.CaptionHeight.

If you want to get the location of the CaptureBox in screen coordinates, you can use the PointToScreen method:

Point loc = CaptureBox.PointToScreen(Point.Empty);
于 2013-08-25T13:25:09.503 回答