删除标题栏但保留控制框?

时间:2011-05-07 18:23:16

标签: .net vb.net winforms

我正在覆盖表单中的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

但是控制盒(关闭和最小化)消失了。有没有办法将控制框和文本保留在任务栏中,但删除通常的标题?

3 个答案:

答案 0 :(得分:2)

如果我理解你的话,你想隐藏标题栏中的标题(也许是图标),而不是从任务栏中隐藏,就像Vista / 7资源管理器窗口一样。

这可以帮到你: MSDN Forums 在pvAttribute中使用this method和首选的WTA_OPTIONS(应为0x03)。

答案 1 :(得分:1)

一旦您选择自己绘制非客户区域,您必须全部绘制。没有混合选项。

答案 2 :(得分:0)

您覆盖创建参数以获取窗口而不标题栏。实现对WM_NCHITTEST的支持是正确的,用户没有其他方式可以移动窗口。

您不必重写CreateParams来获取此行为。只需将ControlBox属性设置为False,将Text属性设置为空字符串即可。你想要什么很难猜到。如果您不想丢失标题栏上的按钮,则只需将ControlBox设置为False即可。 “不寻常的标题”也很难猜测,你看到的只有Text属性的值。如果您不想要标题,请将其设置为空字符串。