Windows Forms: включить / отключить WS_CLIPCHILDREN - PullRequest
1 голос
/ 25 марта 2010

Как включить / выключить стиль окна WS_CLIPCHILDREN в родительском элементе управления Windows Forms?

Я бы хотел отобразить текст поверх дочернего элемента управления после его рисования. В моем родительском контроле вот что у меня есть:

class Parent : public Control {
    void Parent::OnPaint(PaintEventArgs ^e){
        Control::OnPaint(e);

        // parent draws here
        // some drawing should happen over the child windows
        // in other words, do not clip child window regions
    }
};

При проверке с помощью Spy ++ я обнаружил, что у родителя по умолчанию включен стиль окна WS_CLIPCHILDREN. Как Windows Forms может отключить эту функцию?

Примечание: Пример кода на C ++ / CLI, но я пометил этот C # для наглядности ... язык здесь несущественен. Не стесняйтесь переводить код на C #.

Ответы [ 2 ]

1 голос
/ 13 июня 2010

Вы можете сделать это, переопределив свойство CreateParams вашего родительского элемента управления:

protected override CreateParams CreateParams {
    get {
        new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();

        // Modify the existing style.
        CreateParams cp = base.CreateParams;
        // Remove the WS_CLIPCHILDREN flag.
        cp.Style &= ~0x02000000; // WS_CLIPCHILDREN value.

        return cp;
    }
}
0 голосов
/ 25 марта 2010

Вы можете попробовать удалить стиль напрямую, используя P / Invoke, используя функцию SetWindowLong. Используйте свойство Form.Handle в качестве дескриптора окна.

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