我以前从未使用过Windows。我付出了很多努力来获取正确的X和Y坐标以及窗口的大小以及窗口的客户区域的大小。
不幸的是,客户区的X和Y始终为零。我在文档中进行了查找,应该为零。
在SO上,我发现需要将客户端传递给ClientToScreen()
,以将客户端坐标转换为屏幕坐标。但是,结果并非我期望的那样。
我得到的是Point(1,57027688545264E-312,0)而不是Point(50,50)(或类似的数字)。
有人可以启发我怎么做吗?
到目前为止,这是我的代码:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetClientRect(IntPtr hWnd, out Rect rect);
[DllImport("user32.dll")]
static extern bool ClientToScreen(IntPtr hWnd, ref System.Windows.Point lpPoint);
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
static Rectangle GetClientRect(IntPtr handle)
{
Rect rect;
GetClientRect(handle, out rect);
System.Windows.Point p = new System.Windows.Point(0, 0);
ClientToScreen(handle, ref p);
rect.Left = (int)p.X;
rect.Top = (int)p.Y;
return new Rectangle(rect.Left, rect.Top, rect.Right, rect.Bottom);
}
最佳答案
System.Windows.Point
结构与ClientToScreen
不兼容。您应该改用System.Drawing.Point
。
关于c# - ClientToScreen意外的返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34534279/