Центрирование формы окна C # внутри другого окна - PullRequest
4 голосов
/ 22 июня 2011

Я хочу, чтобы моя форма запускалась и открывалась в центре относительно окна, которое было активным при вызове моей формы. Скажем, если Firefox был активен, и я отображаю форму, я бы хотел, чтобы моя форма отображалась в «центре» окна Firefox.

Я думаю, что одним из способов добиться этого является использование SetWindowPos из user32.dll, но я не слишком уверен, что есть более простой способ.

Я уже поиграл с SetWindowPos и ​​обнаружил, что могу легко центрировать свое окно по всему экрану, но я не слишком уверен, где мне следует начать работу по центрированию его относительно другого окна.

В основном мне нужно будет:

  1. Расположение окна / размер окна
  2. Выполните математику, чтобы найти координаты в центре минус размер моей формы для подготовки
  3. Показать мою форму и использовать set window pos, чтобы правильно ее расположить?

Примечание: CenterParent не будет работать для этого, похоже, он работает только для другого элемента управления формы. Я хочу использовать это с другими окнами, например, с Firefox.

1 Ответ

2 голосов
/ 22 июня 2011

Если вы хотите центрировать новое окно относительно родительского окна, тогда вы можете установить «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  
}
...