Как надежно определить стыковку окон Windows 7 с помощью WinForms?

Я пытаюсь надежно определить, когда форма в данный момент пристыкована. Мой текущий код работает, но не тогда, когда предсказуемое масштабирование отличается от 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% масштабировании, но не другие значения масштабирования дисплея!

0 ответов

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