【问题标题】:Center a C# Windows Form inside another window在另一个窗口中居中 C# Windows 窗体
【发布时间】:2011-09-20 00:22:19
【问题描述】:

我希望我的表单启动并在相对于我的表单被调用时处于活动状态的窗口的中心打开。假设 Firefox 处于活动状态并且我显示表单,我希望我的表单显示在 Firefox 窗口的“中心”。

我认为实现这一点的一种方法是使用 user32.dll 中的 SetWindowPos,但我是 不太确定是否有更简单的方法。

我已经玩过 SetWindowPos,发现我可以轻松地将我的窗口居中在整个屏幕上,但我不太确定我应该从哪里开始将其相对于另一个窗口居中。

基本上,我需要:

  1. 抓取窗口位置/大小
  2. 做数学计算,找到中心坐标减去我要准备的表格大小
  3. 显示我的表单并使用设置窗口位置来正确定位它?

注意:CenterParent 不适用于这个,它似乎只适用于另一个 Form 控件。我想将它与其他窗口一起使用,例如 Firefox。

【问题讨论】:

    标签: c# winforms center


    【解决方案1】:

    如果您希望新窗口相对于父窗口居中,则可以将子窗体的“StartPosition”设置为“CenterParent”。如果你想让新窗口相对于其他窗口居中,那么我认为你已经处理了 Windows API。

    [DllImport("user32.dll")]  
    static extern IntPtr GetForegroundWindow();  
    
    
    private IntPtr GetActiveWindow()  
    {  
        IntPtr handle = IntPtr.Zero;  
        return GetForegroundWindow();  
    }
    
    Then get the window position with GetWindowRect.
    
    [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  
    }
    

    【讨论】:

    • 同样,相对于我激活的窗口,这似乎不起作用。 CenterParent 似乎只适用于 Windows 窗体控件。当我在 Firefox 上尝试这个时,它只是从屏幕的左上角开始。
    • @Steven Colgrove - 我认为你必须使用 user32.dll 来获取当前活动窗口的位置。我你想要它的代码,我可以给你。 :)
    • 我不认为他的意思是在父窗口中居中一个窗口,而是一个任意窗口。
    • Bibhu,我想举个例子。我在使用此类外部调用方面不是很有经验。
    • 非常感谢您。我将粘贴我所做的任何添加,以使我能够进入此窗口的中心:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多