在 Windows 7 中,音量混合器窗口具有特定的样式,具有厚实、透明的边框,但没有标题栏。如何在 winforms 窗口中重新创建该窗口样式?
我尝试将 Text 设置为 string.Empty,并将 ControlBox 设置为 false,这会删除标题栏,但随后边框也会消失:
在 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
由于“此编辑旨在解决帖子的作者,并且作为编辑毫无意义。它应该被写为评论或答案。” 我对克里斯的答案进行了编辑作为新答案。
他的答案的代码与描述的一样 - 除了它还可以防止任何客户区鼠标事件的发生。您需要返回 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;