如何创建带边框的表单,但没有标题栏? (比如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;