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