Spy++ говорит нам, что это на самом деле два отдельных STATIC
controls (аналогично Label
в WinForms).
Первый - это просто обычный статический текстовый элемент управления, который гласит «Главная страница».
Второй имеет набор SS_ETCHEDHORZ
style, который заставляет его рисовать как трехмерную линию. К сожалению, возможность устанавливать этот стиль не предоставляется нам изнутри WinForms.
Как вы отметили в вопросе, есть некоторые писаки/обходные пути, которые позволяют нам достичь такого же вида, как и вертикально сжимает GroupBox
управления или перекрывая OnPaint
метода Label
контроля и используя ControlPaint
класс для рисования трехмерной границы. Они работают, но я их никогда не любил.
Но вы можете сами установить стиль SS_ETCHEDHORZ
, чтобы вы могли точно реплицировать собственный пользовательский интерфейс. Вот небольшой класс, который делает именно это. Добавьте его в свой проект, скомпилируйте, и вы увидите, что новый элемент управления отображается в панели инструментов под названием «HorizontalRule». Используйте его так же, как и любой другой элемент управления!
public class HorizontalRule : Control
{
private const int FixedHeight = 2;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int SS_ETCHEDHORZ = 0x00000010;
private const int SS_ETCHEDVERT = 0x00000011;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassName = "STATIC";
cp.Style = WS_CHILD | SS_ETCHEDHORZ;
if (this.Visible)
{
cp.Style |= WS_VISIBLE;
}
return cp;
}
}
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
height = FixedHeight;
base.SetBoundsCore(x, y, width, height, specified);
}
}
Вы также можете найти более подробную информацию и дополнительные примеры кода here on CodeProject.
Использование изображения будет проблемой, если стиль элементов управления изменится в будущей версии Windows. У вашего управления все еще будет старый стиль. –
Технически это правда, но если это просто простая тонкая линия, то для нее не так уж много «стиля», поэтому это не имеет значения. Моя линия последовательно демонстрирует красиво в XP, Vista и Windows 7 также с разными темами. – Peladao
Это очень * возможно, что будущая версия Windows резко изменит стиль этой «простой тонкой линии». Обратите внимание, сколько групповых ящиков изменилось с темы «Классика» на Luna в Windows XP, а затем снова в Aero в Windows Vista. (Еще одна причина, почему использование группового окна не будет работать для дублирования примера в исходном вопросе.) –