Я занимаюсь разработкой пользовательской формы, которая предоставляет больше возможностей для настройки внешнего вида формы. Я переопределил wndproc и вычислил размер формы в методе calcsize (), получая сообщение 131 в wndproc. Я сделал вычисления, чтобы настроить высоту заголовка в calcsize (). Пожалуйста, обратитесь к следующему коду ниже. Проблема заключается в том, что при открытии формы с помощью borderstyle sizeablewindowtool в окнах 10 и 8 форма перемещается внутри панели задач (это поведение формы msdn). Но проблема в том, что когда я открываю форму в windows 7, форма переходит в панель задач. Я проверил с помощью формы msdn, что она не переходит в панель задач для windows 7. Пожалуйста, помогите мне найти мой ошибка.
/// <summary>
/// Calculates the non client area of the form
/// </summary>
/// <param name="m">reference message</param>
/// <returns>retruns true if the method returns combiantion of values
/// returns false if the method return zero</returns>
private bool OnWmNcCalcSize(ref Message m)
{
NativeMethods.RECT rc = (NativeMethods.RECT)m.GetLParam(typeof(NativeMethods.RECT));
int iBorderWidth = fl.BorderWidth;
fl.PerformLayout(rc.Width, rc.Height);
rc.top += fl.CaptionHeight;
if (this.WindowState == FormWindowState.Maximized)
{
///<summary>
/// local variable to store x-coordinate of native rectangle,rc.left is -6 when we double click on title-bar and -8 when we click the maximize button.
///</summary>
int xcoordinate = rc.left;
rc.left -= xcoordinate;
rc.right += xcoordinate;
rc.bottom += xcoordinate;
}
else
{
rc.left += iBorderWidth - (iBorderWidth / 3);
rc.right -= iBorderWidth - (iBorderWidth / 3);
rc.bottom -= iBorderWidth - (iBorderWidth / 3);
}
Marshal.StructureToPtr(rc, m.LParam, true);
m.Result = IntPtr.Zero;
return true;
}