Использование RectVisible в Windows Forms Control - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь выяснить, является ли элемент управления Windows Forms видимым для пользователя или заблокирован от просмотра другим элементом управления или формой (представление с вкладками).Я попробовал трюк GetUpdateRect, но он работает, только если окно свернуто.Я нашел функцию RectVisible , но не уверен, как использовать ее из пользовательского элемента управления Windows Forms.

Заранее спасибо

1 Ответ

0 голосов
/ 29 марта 2012

Я не уверен, что вы подразумеваете под "Работает только если окно свернуто"Решение с GetUpdateRect работает:

[StructLayout(LayoutKind.Sequential)]
internal struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
    public int Width { get { return this.Right - this.Left; } }
    public int Height { get { return this.Bottom - this.Top; } }
}

[DllImport("user32.dll")]
internal static extern bool GetUpdateRect(IntPtr hWnd, ref Rect rect, bool bErase);

public static bool IsControlVisibleToUser(Control control)
{
    control.Invalidate();
    var bounds = control.Bounds;
    var rect = new Rect {Left=bounds.Left, Right = bounds.Right, Top = bounds.Top, Bottom = bounds.Bottom};
    return GetUpdateRect(control.Handle, ref rect, false);
}
...