Как надежно определить стыковку окон Windows 7 с помощью WinForms? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь надежно определить, когда форма в данный момент закреплена.Мой текущий код работает, но не тогда, когда масштабирование отличается от 100%, как и ожидалось.

Я пытаюсь найти функцию, которая возвращает координаты рабочей области, которые будут соответствовать тому, что GetExtendedFrameBounds (PInvoke: DwmGetWindowAttribute с DWMWA_EXTENDED_FRAME_BOUNDS)позволяет мне работать с ним, который я использую для определения стыковки.

public static bool IsWindowDocked(Form form, int numSides = 3)
{
    var workArea = Screen.GetWorkingArea(form);
    var winRect = PInvoke.GetExtendedFrameBounds(form.Handle);
    var score = (winRect.Left == workArea.Left ? 1 : 0) +
        (winRect.Top == workArea.Top ? 1 : 0) +
        (winRect.Right == workArea.Right ? 1 : 0) +
        (winRect.Bottom == workArea.Bottom ? 1 : 0);
    return (score >= numSides);
}

Текущий результат обнаружит стыковку при 100% масштабировании, но не при других значениях масштабирования дисплея!

...