gpt4 book ai didi

c# - 我如何使用 SetWindowPos 使窗口居中?

转载 作者:太空宇宙 更新时间:2023-11-03 19:58:12 28 4
gpt4 key购买 nike

我想做的是将 handle 放在屏幕的前面和中央。把它放在前面 我知道该怎么做 我正在使用 SetForegroundWindow(IntPtr hWnd); 并且它工作正常。但是如何使用 SetWindowPos 强制位于屏幕中央?

IntPtr handle = process.MainWindowHandle;
if (handle != IntPtr.Zero)
{
SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}

然后,当我在构造函数中调用 SetWindowPos 时,我应该给它什么? handle 很好我知道它应该是什么。但是所有的 resr 0,0,0,0,0,0 以及 SWP_NOZORDER 和 SWP_NOSIZE 的值应该是多少?

最佳答案

在将它居中之前,首先您必须知道它有多大。这可以通过 GetWindowRect() 来完成应用程序接口(interface)。之后,只需考虑屏幕尺寸计算中心位置即可:

public partial class Form1 : Form
{

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}

private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOZORDER = 0x0004;
private const int SWP_SHOWWINDOW = 0x0040;

[DllImport("user32.dll", SetLastError=true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

Process process;

public Form1()
{
InitializeComponent();
process = Process.GetProcessesByName("calc").FirstOrDefault();
}

private void button1_Click(object sender, EventArgs e)
{
if (process == null)
return;

IntPtr handle = process.MainWindowHandle;
if (handle != IntPtr.Zero)
{
RECT rct;
GetWindowRect(handle, out rct);
Rectangle screen = Screen.FromHandle(handle).Bounds;
Point pt = new Point(screen.Left + screen.Width / 2 - (rct.Right - rct.Left) / 2, screen.Top + screen.Height / 2 - (rct.Bottom - rct.Top) / 2);
SetWindowPos(handle, IntPtr.Zero, pt.X, pt.Y, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}

}

关于c# - 我如何使用 SetWindowPos 使窗口居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271828/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com