如何创建带边框的表单,但没有标题栏? (比如Windows 7上的音量控制)

时间:2010-08-29 08:32:53

标签: c# .net winforms windows-7 windows-style-flags

在Windows 7中,音量混合器窗口具有特定样式,具有粗糙透明边框,但没有标题栏。如何在winforms窗口中重新创建窗口样式?

volume mixer

我尝试将Text设置为string.Empty,将ControlBox设置为false,这会删除标题栏,但边框也会消失:

border disappears

3 个答案:

答案 0 :(得分:33)

form.Text = string.Empty;
form.ControlBox = false;
form.FormBorderStyle = FormBorderStyle.SizableToolWindow;

对于固定大小的窗口,您仍应使用FormBorderStyle.SizableToolWindow,但您可以覆盖表单的WndProc以忽略非客户端命中测试(用于切换到大小调整游标):< / p>

protected override void WndProc(ref Message message)
{
    const int WM_NCHITTEST = 0x0084;

    if (message.Msg == WM_NCHITTEST)
        return;

    base.WndProc(ref message);
}

如果您想真正强制执行尺寸,您还可以在表单上将MinimumSize设置为MaximumSize

答案 1 :(得分:1)

因为“此编辑旨在解决帖子的作者,并且作为编辑没有任何意义。它应该被写成评论或答案。”我将克里斯回答的编辑作为一个新答案。

他的答案按照描述运行的代码 - 除了它还可以防止发生任何客户区鼠标事件。您需要返回1(如在HTCLIENT中)来修复它。

protected override void WndProc(ref Message message)
{
    const int WM_NCHITTEST = 0x0084;
    const int HTCLIENT = 0x01;

    if (message.Msg == WM_NCHITTEST)
    {
        message.Result = new IntPtr(HTCLIENT);
        return;
    }

    base.WndProc(ref message);
}

答案 2 :(得分:-1)

form.FormBorderStyle = FormBorderStyle.Fixed3D;