2011-05-07 3 views
0

Я перекрывая свойство CreateParams в моей форме, чтобы сделать пользовательский негабаритный заголовок окна:Удалить строку заголовка, но сохранить блок управления?

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams 
    Get 
     CreateParams = MyBase.CreateParams 
     CreateParams.Style = CInt(CreateParams.Style And Not &HC00000L) 'WS_CAPTION 
    End Get 
End Property 

И я переопределении WndProc, чтобы позволить форму быть втянутой:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    MyBase.WndProc(m) 

    If m.Msg = &H84 AndAlso m.Result.ToInt32() = 1 Then m.Result = New IntPtr(2) 
End Sub 

Но контроль (закрытие и сведение к минимуму) исчезает. Есть ли способ сохранить блок управления и текст на панели задач, но удалить обычный заголовок?

ответ

2

Если я правильно понял, вы хотите скрыть заголовок (и, возможно, значок) из заголовка, но не с панели задач, как окно Vista/7 Explorer.

Это должно помочь вам: MSDN Forums Использование this method с предпочитаемым вами WTA_OPTIONS (должно быть 0x03) в pvAttribute.

+0

Это работает только при включенной композиции DWM. Вы должны включить код для обработки вещей по-разному, если он отключен (или если пользователь работает в Windows XP). –

+0

Да, мне это уже удалось. Спасибо, работает отлично !!! – Ryan

+0

О, извините, что я забыл это сказать. Это аэро-единственная (также базовая) функция. – seri

1

Как только вы сами выбираете неклиентскую область, вам нужно нарисовать все. Гибридных вариантов нет.

0

Вы переопределили параметры создания, чтобы получить окно без строка заголовка. Реализация поддержки WM_NCHITTEST была правильной, не было бы другого способа, чтобы пользователь мог перемещать окно вокруг.

Вам не нужно переопределять CreateParams для получения этого поведения. Просто установите для свойства ControlBox значение False, свойство Text - пустой строке. То, что вам нужно, сложно догадаться. Если вы не хотите терять кнопки в строке заголовка, просто не устанавливайте ControlBox в значение False. «Необычное название» очень сложно угадать, то, что вы видите, есть только значение свойства Text. Установите его в пустую строку, если вам не нужен заголовок.

+0

Я хочу, чтобы текст отображался на панели задач, поэтому установка текста в пустую строку не будет работать. Конечно, я хочу держать блок управления, я так сказал в своем вопросе, так почему я должен установить Controlbox в False? Я думаю, вы неправильно поняли - я переопределяю параметры создания, чтобы удалить строку заголовка, чтобы я мог нарисовать свою собственную панель заголовков, с изображениями и пользовательскими шрифтами. – Ryan

+0

Ну, тогда вам нужно только нарисовать нужный заголовок, переопределив метод формы OnPaint() формы. Вы можете заставить его выглядеть так, как вы этого хотите, не нужно, чтобы это выглядело странно. Вам также нужно будет нарисовать собственные глифы для кнопок «Свернуть» и «Закрыть», e.Graphics.DrawImage в методе OnPaint() сделает это. И вы должны выполнить проверку на удар в переопределении OnMouseDown, чтобы вы могли видеть, как пользователь пытается щелкнуть ваши кнопки. Или используйте обычную кнопку. –

+0

Я хочу сохранить блок управления (закрыть и свернуть). – Ryan

Смежные вопросы