Zmiana tego zachowani to zapewne problem na poziomie WinAPI.
Mam wrażenie że nawet w WinAPI nie jest prosto... Zmiana FormBorderStyle automatycznie powoduje że okno po prostu nie dostaje pewnych komunikatów (wynika to z tego że zmienia się również styl który dostaje WinAPI). Proponuję przetestowanie kodu (dla stylu Sizable i None):
public partial class Form1 : Form
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x112)
{
if (m.WParam.ToInt32() == 0xF020)
{
MessageBox.Show("Chcą mnie zminimalizować!");
}
}
base.WndProc(ref m);
}
}
Mógłbyś to zrobić regionami (również za pomocą WinAPI) ale przykładów do tego ze zrozumiałych powodów w C# raczej nie znajdziesz... Tym niemniej jeśli chcesz się przez to przedzierać:
http://www.flipcode.com/archives/Win32_Window_Skinning.shtml
http://www.codeproject.com/KB/GDI/rgnguide.aspx
(edit:) -----------------------------------
Ok, szybki research. W C# jest dostęp do regionów, mimo że mocno okrojonych to wystarczających dla osiągnięcia tego celu.
Trochę mi czasu zajęło napisanie tego we w miarę dobry sposób, ale:
Styl zostaw Sizable i dodaj sobie do jakiegoś OnLoada kod
int borderWidth = SystemInformation.FrameBorderSize.Width;
int titlebarHeight = SystemInformation.CaptionHeight + borderWidth;
Rectangle csz = new Rectangle(borderWidth, titlebarHeight, ClientSize.Width, ClientSize.Height);
this.Region = new Region(csz);
Za to jeśli i jakie cuda będzie okno wyprawiało podczas działania nie odpowiadam (ale takie są koszty zmieniania ustalonych zasad)...