Расположите окно относительно другого окна после перемещения
Мы разрабатываем приложение 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, либо запуск / перезапуск таймера при каждой обработке сообщения окна, чтобы задержать процесс обновления. Есть другие идеи?