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

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

体积混合器

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

边界消失了

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

因为“这个编辑旨在解决post的作者,并且没有任何意义作为编辑。它应该被写成评论或答案。” 我将Chris的回答作为一个新答案进行编辑。

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

form.FormBorderStyle = FormBorderStyle.Fixed3D;