Я довольно новичок в C #. Чтобы получить приложение современного дизайна, я решил сделать свою форму без полей. Затем я нашел фрагмент кода, позволяющий переместить мою форму без полей, которая прекрасно работает.
private const int WM_NCHITTEST = 0x84;
private const int HT_CAPTION = 0x2;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg) {
case WM_NCHITTEST:
m.Result = (IntPtr)(HT_CAPTION);
break;
}
}
Мне также нужно извлечь событие максимизации формы, и нашел другой фрагмент кода, который снова работаетв совершенстве. По крайней мере, если я буду использовать их независимо.
case WM_SYSCOMMAND:
if (IsMaximized == false)
{
IsMaximized = true;
Btn_Ribbon_MaximizeMinimize.Image = Properties.Resources.Img_MinimizeForm;
this.WindowState = FormWindowState.Maximized;
}
else if (IsMaximized == true)
{
IsMaximized = false;
Btn_Ribbon_MaximizeMinimize.Image = Properties.Resources.Img_MaximizeForm;
this.WindowState = FormWindowState.Normal;
}
break;
Теперь вот странная часть. Если я использую их обоих вместе ...
#region Move borderless Form
private const int WM_NCHITTEST = 0x84;
private const int HT_CLIENT = 0x1;
private const int HT_CAPTION = 0x2;
private const int WM_SYSCOMMAND = 0x0112;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg) {
case WM_NCHITTEST:
m.Result = (IntPtr)(HT_CAPTION);
break;
case WM_SYSCOMMAND:
if (IsMaximized == false)
{
IsMaximized = true;
Btn_Ribbon_MaximizeMinimize.Image = Properties.Resources.Img_MinimizeForm;
this.WindowState = FormWindowState.Maximized;
}
else if (IsMaximized == true)
{
IsMaximized = false;
Btn_Ribbon_MaximizeMinimize.Image = Properties.Resources.Img_MaximizeForm;
this.WindowState = FormWindowState.Normal;
}
break;
}
}
#endregion
... Я получаю всевозможные странные побочные эффекты:
- Достаточно одного клика на мою форму, чтобы онмаксимизировать себя
- После минимизации моего приложения, повторный щелчок его значка на панели задач Windows не приводит к его нормализации, но максимизация
Как избавиться от этих побочных эффектов,или даже лучше, чем обходной путь, есть ли лучший способ сделать эту работу?