0

我们正在开发一个 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 额外检查一次窗口位置,或者每次处理窗口消息时启动/重新启动计时器,以延迟更新过程。还有其他想法吗?

4

0 回答 0