我正在使用C#开发一个Windows窗体应用程序,其中我有一个必须以最大化状态启动并且不允许用户恢复或调整大小的窗体。我已经将表单配置为以最大化模式启动,禁用还原和最大化按钮并锁定表单的边框但是当双击标题栏时,表单将恢复为较小的大小,这是意外的。以下是我为实现所需行为而设置的属性:
FormBorderStyle = FixedSingle
MaximizeBox = False
WindowState = Maximized
有人可以帮我解决这个问题并向我解释解决方案吗?
提前致谢。
答案 0 :(得分:7)
您必须记住,您的表单以某些默认大小值开头,双击只是在两种状态之间切换 在正常状态下,表单将检索它的最后一个(在您的情况下为默认值)大小,您可以覆盖它:
Width = Screen.PrimaryScreen.Bounds.Width;
Height = Screen.PrimaryScreen.Bounds.Height;
另一件事是你的应用程序有一个叫做开始位置的东西(从我记得的)默认到屏幕的中心,你可以使用以下方法更改它:
Form.StartPosition = new Point(0, 0); // top-left corner
现在,您在应用程序中所要做的就是检查窗口状态之间的切换。最简单的方法是使用WndProc
并等待this msdn page中列出的消息:
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
const int SC_RESTORE = 0xF120;
if (m.Msg == WM_SYSCOMMAND)
{
switch((int)m.WParam)
{
case SC_RESTORE:
// your window was restored ( double clicked on the command bar )
// set it's window state back to maximize or do whatever
break;
case SC_MAXIMIZE:
// your window was maximized .. no actions needed, just for debugging purpose
break;
}
}
base.WndProc(ref m);
}
答案 1 :(得分:3)
这可以通过捕获事件并覆盖它来完成:
private void Form_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.WindowState = FormWindowState.Maximized;
this.MaximizeBox = false;
this.MinimumSize = Screen.GetWorkingArea(this.Location).Size;
}
private const int WM_NCLBUTTONDBLCLK = 0x00A3;
//double click on a title bar
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
m.Result = IntPtr.Zero;
return;
}
base.WndProc(ref m);
}