c#窗口置父在指定窗口的标题位置
时间: 2023-12-04 12:05:32 浏览: 139
c#实现无标题栏窗口的拖动
你可以使用以下代码将一个窗口置于另一个窗口的标题位置:
```csharp
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
private void SetChildFormToTitleBar()
{
// 获取父窗口句柄
IntPtr parentHandle = FindWindow(null, "父窗口的标题");
// 获取父窗口的位置信息
RECT rect;
GetWindowRect(parentHandle, out rect);
// 创建子窗口并设置其父窗口为父窗口
Form childForm = new Form();
childForm.Text = "子窗口";
SetParent(childForm.Handle, parentHandle);
// 设置子窗口的位置信息为父窗口的标题位置
childForm.Left = rect.Left;
childForm.Top = rect.Top;
childForm.Width = rect.Right - rect.Left;
childForm.Height = 30; // 标题栏高度一般为30
childForm.Show();
}
```
其中,`FindWindow` 函数用于获取指定窗口标题的句柄,`SetParent` 函数用于将子窗口设置为父窗口的子窗口,`GetWindowRect` 函数用于获取父窗口的位置信息。最后,根据父窗口的位置信息设置子窗口的位置和大小即可。
阅读全文