Вы должны быть осторожны, чтобы позволить форме изменить размер при запуске. Необходим для масштабирования, необходимого на компьютере с другим параметром DPI для видео или другим системным размером шрифта. Или пользовательское переопределение, которое изменило высоту строки заголовка. Все это разбирается к моменту запуска события Load. Таким образом:
protected override void OnLoad(EventArgs e) {
Screen scr = Screen.FromControl(this);
this.MinimumSize = new Size(this.MinimumSize.Width, this.Height);
this.MaximumSize = new Size(scr.WorkingArea.Width, this.Height);
}
Следующее, что вам нужно сделать, это исправить поведение курсора, когда пользователь перемещает его по краю окна, что позволяет изменить размер окна по вертикали. Это немного уродливо, вы должны перехватить сообщение WM_NCHITTEST с помощью WndProc и изменить возвращаемое значение сообщения:
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == 0x84) { // Trap WM_NCHITTEST
switch (m.Result.ToInt32()) {
case 12: m.Result = (IntPtr)2; break; // HTTOP to HTCAPTION
case 13: m.Result = (IntPtr)10; break; // etc..
case 14: m.Result = (IntPtr)11; break;
case 15: m.Result = (IntPtr)1; break;
case 16: m.Result = (IntPtr)10; break;
case 17: m.Result = (IntPtr)11; break;
}
}
}