ボーダレスフォームを使用していて、ドラッグできるようにHTCAPTIONを使用してフォームを実装しました。HTCAPTIONのもう1つの利点は、2倍にすると、最小化および最大化できることです。唯一の問題は、ウィンドウが最大化されたときにボタンのアイコンを最大化ボタンから通常モードボタンに変更できるように、イベントをキャッチしたいということです。これを実装する方法についての素晴らしいアイデアはありますか?
保護されたオーバーライドvoidWndProc(refメッセージm){base.WndProc(ref m);
switch(m.Msg)
{
case Global.WM_NCHITTEST:
Point mouseCursor = PointToClient(Cursor.Position);
if (mouseCursor.X < borderSize && mouseCursor.Y < borderSize)
m.Result = (IntPtr)Global.HTTOPLEFT;
else if (mouseCursor.X < borderSize && mouseCursor.Y > Height - borderSize)
m.Result = (IntPtr)Global.HTBOTTOMLEFT;
else if (mouseCursor.X < borderSize)
m.Result = (IntPtr)Global.HTLEFT;
else if (mouseCursor.X > Width - borderSize && mouseCursor.Y < borderSize)
m.Result = (IntPtr)Global.HTTOPRIGHT;
else if (mouseCursor.X > Width - borderSize && mouseCursor.Y > Height - borderSize)
m.Result = (IntPtr)Global.HTBOTTOMRIGHT;
else if (mouseCursor.X > Width - borderSize)
m.Result = (IntPtr)Global.HTRIGHT;
else if (mouseCursor.Y < borderSize)
m.Result = (IntPtr)Global.HTTOP;
else if (mouseCursor.Y > Height - borderSize)
m.Result = (IntPtr)Global.HTBOTTOM;
else
m.Result = (IntPtr)Global.HTCAPTION;
break;
}
}
これは、キャッチされたイベントに追加したいコードです
if (WindowState == FormWindowState.Maximized)
{
WindowState = FormWindowState.Normal;
pb_max.Image = GomeeSoft.Properties.Resources.buttonmax;
}
else
{
Screen screen = Screen.FromRectangle(new Rectangle(Left, Top, Width, Height));
this.MaximumSize = screen.WorkingArea.Size;
WindowState = FormWindowState.Maximized;
pb_max.Image = GomeeSoft.Properties.Resources.buttonreturn;
}