Расположите окно относительно другого окна после перемещения

Мы разрабатываем приложение WPF, которое при некоторых обстоятельствах открывает дополнительное окно, которое всегда должно быть прикреплено к родительскому (главному) окну. В настоящее время мы подключаем основное приложение и используем оконные сообщения:

private void OnLoaded()
{
    //...
    HwndSource.FromHwnd(handle).RemoveHook(OwnerWindowProc);
}

private IntPtr OwnerWindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    switch (msg)
    {
        case WM_MOVE:
        case WM_MOVING:
            RefreshPosition();
            break;
    }

    return (IntPtr)0;
}

private void RefreshPosition()
{
    var newLeft = Owner.Width + Owner.Left;
    var newTop = VerticalOffset + Owner.Top;

    Left = newLeft;
    Top = newTop;
}

Это работает довольно хорошо, за исключением некоторых редких случаев, когда вы очень быстро опускаете окно - дополнительное окно просто остается в устаревшем положении, что, очевидно, неверно.

Другой / Дополнительный подход пришел мне в голову. Либо проверка положения окон дополнительно каждые x MS, либо запуск / перезапуск таймера при каждой обработке сообщения окна, чтобы задержать процесс обновления. Есть другие идеи?

0 ответов

Другие вопросы по тегам