Как сделать окно имеет текст панели задач, но без заголовка

Как я могу заставить мое окно не иметь строку заголовка, а появляться на панели задач с некоторым описательным текстом? Если вы установите свойство 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.