Как сделать окно имеет текст панели задач, но без заголовка
Как я могу заставить мое окно не иметь строку заголовка, а появляться на панели задач с некоторым описательным текстом?
Если вы установите свойство Form.Text, то .net дает ему строку заголовка, которую я не хочу.
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.ShowInTaskbar = true;
this.Text = "My title for task bar";
Я нашел частичное решение, чтобы переопределить CreateParams:
protected override System.Windows.Forms.CreateParams CreateParams
{
get
{
System.Windows.Forms.CreateParams cp = base.CreateParams;
cp.Style &= ~0x00C00000; // WS_CAPTION
return cp;
}
}
Однако это приводит к изменению размера окна, как если бы у них была строка заголовка, то есть она выше, чем должна быть. Есть ли хорошее решение для этого?
Ответы
Ответ 1
Одним из подходов к рассмотрению может быть установка свойства FormBorderStyle
вашего Form
на None
(вместо FixedDialog
).
Недостатком этого подхода является то, что вы теряете границы своего окна, а также заголовок. Результатом этого является то, что вы теряете форму репозиционирования/изменения размера логики, которую вы обычно получаете "бесплатно" с помощью Windows Forms; вам нужно будет справиться с этим, реализовав свою собственную логику перемещения/изменения размера в обработчиках событий MouseDown и MouseMove.
Мне также будет интересно узнать о лучших решениях.
Ответ 2
В моем случае у меня есть форма с FormBorderStyle = FormBorderStyle.SizableToolWindow
, и следующее переопределение CreateParams
выполнило трюк (т.е. теперь у меня есть форма без заголовка и без дополнительного поля для заголовка, но она сохраняет заголовок в панели задач ):
protected override System.Windows.Forms.CreateParams CreateParams
{
get
{
var parms = base.CreateParams;
parms.Style &= ~0x00C00000; // remove WS_CAPTION
parms.Style |= 0x00040000; // include WS_SIZEBOX
return parms;
}
}
Ответ 3
Просто установите для стиля рамки значение None.
this.FormBorderStyle = FormBorderStyle.None;
Ответ 4
Как только вы удалили границы с помощью FormBorderStyle, как уже упоминалось, вы можете легко перетаскивать его. Я описываю это на http://www.blackwasp.co.uk/DraggableBorderless.aspx.