Форму с FormBorderStyle None можно сделать такую, чтобы пользователь мог менять и ее размеры мышью, как у обычной формы:
public frmTest()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16; // Grip size
private const int cCaption = 24; // Caption bar height;
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip,
this.ClientSize.Height - cGrip, cGrip, cGrip);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x84)
{ // Trap WM_NCHITTEST
Point pos = new Point(m.LParam.ToInt32() & 0xffff,
m.LParam.ToInt32() >> 16);
pos = this.PointToClient(pos);
if (pos.Y < cCaption)
{
m.Result = (IntPtr)2; // HTCAPTION
return;
}
if (pos.X >= this.ClientSize.Width - cGrip &&
pos.Y >= this.ClientSize.Height - cGrip)
{
m.Result = (IntPtr)17; // HTBOTTOMRIGHT
return;
}
}
base.WndProc(ref m);
}
Переменная cGrip отвечает за размер уголка в правом нижнем углу, за который форму можно тягать, изменяя размер, а cCaption — за «заголовок», точнее, область формы, за которую ее можно таскать по экрану. Цвет области меняется в OnPaint, надо изменить в строке e.Graphics.FillRectangle(Brushes.DarkBlue, rc); у Brushes параметр
DarkBlue на желаемый.
Получаются такие вот симпатичные формочки:

Код на PasteBin
Проект