Как нарисовать 3D-границу, используя визуальные стили? - PullRequest
3 голосов
/ 20 февраля 2009

Я могу нарисовать 3D-границу, используя ControlPaint.DrawBorder3D, но я получаю 3D-границу «Классика Windows». Я хочу нарисовать 3D-границу текущей темы - в теме XP по умолчанию это синяя или серая граница 1px. Как мне нарисовать это, и как я могу получить его ширину?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2009

Похоже, вам может понадобиться посмотреть System.Windows.Forms.VisualStyles.VisualStyleRenderer :

System.Windows.Forms.VisualStyles пространство имен выставляет VisualStyleElement объекты, которые представляют все элементы управления и пользовательский интерфейс элементы, которые поддерживаются визуальным стили. Чтобы нарисовать или получить информацию о конкретном элементе, вы должны установите VisualStyleRenderer на элемент, который вас интересует.

Чтобы нарисовать элемент, используйте DrawBackground метод. VisualStyleRenderer класс также включает методы, такие как GetColor и GetEnumValue, которые предоставляют информацию о том, как элемент определяется текущий визуальный стиль.

На этой странице также есть пример кода.

Вы должны будете нарисовать границу самостоятельно, но вы можете получить цвет от VisualStyleElement.Window.Caption.Active, а размер должен быть размером с оконную раму (я полагаю), который равен VisualStyleElement.Window.FrameBottom.Active. Если вы изучите VisualStyleElement.Window, вы сможете определить, какой элемент окна содержит информацию, необходимую для рисования вашей границы.

1 голос
/ 24 февраля 2009

Pre .NET Framework 2.0 Ответ

Я предполагаю, что вы рисуете свой собственный, специальный элемент управления и хотите использовать элементы текущей активной темы, чтобы нарисовать ее, чтобы она лучше соответствовала стандартным элементам управления XP. Вы НЕ пытаетесь, например, включить темы на стандартном элементе управления Button. Правильно?

Это на самом деле несколько сложно. Ваше основное внимание должно быть UxTheme.dll. Здесь находится все необходимое для рисования тематических элементов управления. Здесь - это хорошая оболочка C # для этой библиотеки, которая облегчит вашу жизнь. Есть и другие, так что, если это не совсем то, что вы хотели, надеюсь, я указал вам верное направление.

...