移动后相对于另一个窗口定位窗口

时间:2015-04-21 08:47:52

标签: c# wpf window-messages

我们正在开发一个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 个答案:

没有答案