Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建带有边框但没有标题栏的窗体?(如Windows 7上的音量控制)_C#_.net_Winforms_Windows 7_Windows Style Flags - Fatal编程技术网

C# 如何创建带有边框但没有标题栏的窗体?(如Windows 7上的音量控制)

C# 如何创建带有边框但没有标题栏的窗体?(如Windows 7上的音量控制),c#,.net,winforms,windows-7,windows-style-flags,C#,.net,Winforms,Windows 7,Windows Style Flags,在Windows7中,音量混合器窗口具有特定的样式,有一个厚而透明的边框,但没有标题栏。如何在winforms窗口中重新创建该窗口样式 我尝试将Text设置为string.Empty,将ControlBox设置为false,这会删除标题栏,但边框也会消失: form.Text = string.Empty; form.ControlBox = false; form.FormBorderStyle = FormBorderStyle.SizableToolWindow; 对于固定大小的窗口

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

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

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

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


如果您想真正强制执行大小,还可以将表单上的
MinimumSize
设置为
MaximumSize

form.FormBorderStyle=FormBorderStyle.Fixed3D

因为“这篇编辑是针对文章作者的,作为编辑毫无意义。它应该作为评论或回答来写。”我将编辑克里斯的回答作为一个新的回答

他的答案代码的工作原理如所述-除了它还可以防止任何客户端区域鼠标事件发生。您需要返回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);
}

不,这会删除边界completely@o“form.FormBorderStyle=FormBorderStyle.SizableToolWindow对我来说似乎工作正常。@oɔǝɹ:
FixedToolWindow
确实删除了3D边框。请参阅我的更新答案,了解如何在3D边框保持不变的情况下获得固定大小的行为。我试图通过
FixedSingle
实现这一点。从这个答案中,我的解决方案是将表单文本设置为空。虽然此代码可能有助于解决问题,但提供关于为什么和/或如何回答问题的附加上下文将显著提高其长期价值。请编辑您的答案以添加一些解释。
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);
}