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