25

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

音量混合器

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

边框消失

4

3 回答 3

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

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

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

    if (message.Msg == WM_NCHITTEST)
        return;

    base.WndProc(ref message);
}

如果您想真正强制执行大小,您还可以在表单上设置MinimumSize等于。MaximumSize

于 2010-08-29T08:45:15.073 回答
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);
}
于 2016-08-17T09:47:37.517 回答
-1

form.FormBorderStyle = FormBorderStyle.Fixed3D;

于 2016-06-26T13:43:09.797 回答