Включение / отключение элементов управления графическим интерфейсом отключает мое переопределение OnMouseWheel - PullRequest
1 голос
/ 29 мая 2011

В моем проекте я использую флаг WS_EX_TRANSPARENT, чтобы динамически определять, должна ли полупрозрачная форма получать события мыши пользователя.

Чтобы сделать ее более интуитивно понятной, я добавил код для отключения всех видимых элементов управления, когда WS_EX_TRANSPARENTоднако, когда этот код вызывается, он «блокирует» мое OnMouseWheel переопределение.

Ниже приведен мой код.Я должен отметить, что этот код работает нормально, если я закомментирую метод 'EnableGUIControls' - фактически, если я закомментирую любую строку внутри метода 'EnableGUIControls', он отлично работает - так что это как-то связано с отключением всех элементов управления.

Удаление фокуса с формы и его повторная активация решают проблему, но ручной вызов Form.Activte () этого не делает.

Я думаю, что отключение всех видимых элементов управления отключаетродитель каким-то образом?Кто-нибудь знает, что происходит?

        private void SetTransparentToMouse(bool should_be_transparent)
    {
        IntPtr flags = GetWindowLong(this.Handle, GWL_EXSTYLE);

        if (((flags.ToInt64() & WS_EX_TRANSPARENT.ToInt64()) > 0) == should_be_transparent)
        {
            return;
        }
        else
        {
            SwapTransparent();
            EnableGUIControls(!should_be_transparent);
        }
    }

    private void SwapTransparent()
    {
        IntPtr flags = new IntPtr(GetWindowLong(this.Handle, GWL_EXSTYLE).ToInt64() ^ WS_EX_TRANSPARENT.ToInt64());
        SetWindowLong(this.Handle, GWL_EXSTYLE, flags);
    }

            protected override void OnKeyUp(KeyEventArgs e)
    {
        if (!e.Alt)
        {
            SetTransparentToMouse(default_mouse_transparency);
        }

        base.OnKeyUp(e);
    }

            protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (e.Alt)
        {
            SetTransparentToMouse(!default_mouse_transparency);
        }

        base.OnKeyDown(e);
    }

    //Commenting out the call to this, or any line within this resolves the problem!:
        void EnableGUIControls(bool enabled)
    {
        this.Button_Opacity.Enabled = enabled;
        this.Button_Close.Enabled = enabled;
        this.Button_Minimize.Enabled = enabled;
        this.Button_Open.Enabled = enabled;
        this.Button_Pan.Enabled = enabled;
        this.Button_Sizemode.Enabled = enabled;
        this.Button_Zoom.Enabled = enabled;
    }

1 Ответ

1 голос
/ 29 мая 2011

Когда все элементы управления отключены, не остается никакого сфокусированного элемента управления, который ловит и перенаправляет сообщения мыши в форму.Попробуйте Form.Focus () вместо Form.Activate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...