Центральная форма в родительском, имеющая только parentWnd - PullRequest
0 голосов
/ 21 октября 2019

Я работаю с Solidworks Pdm Api , и я разрабатываю надстройку с использованием Windows Forms для отображения информации о некоторых файлах.

В документации api рекомендую использовать этокласс, чтобы установить окно Pdm в качестве родителя

public class WindowHandle : IWin32Window
{
    private IntPtr mHwnd;

    public WindowHandle(int hWnd)
    {
        mHwnd = new IntPtr(hWnd);
    }
    public IntPtr Handle
    {
        get { return mHwnd; }
    }
}

И это работает хорошо, поэтому, когда я покажу свою форму, я делаю следующее

//i recived hWnd parameter from the api
WindowHandle myHandle = new WindowHandle(hWnd);
var weForm = new myForm();
weForm.StartPosition = FormStartPosition.CenterParent;
weForm.ShowDialog(myHandle);

На этом этапе,форма показывает без проблем, окно Pdm фактически является родителем, но форма не центрирована.

Я нашел этот вопрос о том, как центрировать формы в его родителе, но, очевидно, кто-то работаеткогда вы используете пользовательский класс, унаследованный от IWin32Window.

Что я могу сделать, чтобы центрировать мою форму?

1 Ответ

0 голосов
/ 21 октября 2019

Если функция автоцентрирования не работает, то вам нужно выполнить математику самостоятельно.

Математика в основном означает, что вы выравниваете центральные точки каждого окна.

int left = parentBounds.Left + (parentBounds.Width / 2) - (childBounds.Width / 2);
int right = parentBounds.Top + (parentBounds.Height / 2) - (childBounds.Height / 2);
...