c#屏幕上控制的绝对位置
我试图在屏幕上获得控件的绝对位置。 我正在使用两台显示器,结果并不是那么好……
我正在做的是打开另一个表单来捕获图像,然后将此图像传递给主表单并关闭捕获表单。 然后我希望主窗体出现在拍摄照片的同一个地方。 要获得我想要做的事情的要点,请在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。
要获得Window caption
的Height
,您可以尝试:
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);