Официальный способ сделать это - обработать сообщение WM_NCPAINT , которое Windows отправляет в ваше окно, когда хочет, чтобы вы нарисовали не-клиентскую область формы (строка заголовка, кнопка закрытия, границы,и т. д.) Это может быть довольно хлопотно, но в этом нет необходимости.Скотт предложил способ получить окно WPF без полей, и подход Windows Forms аналогичен.Обратитесь к свойству FormBorderStyle.
Для поддержки перетаскивания окна, как если бы перетаскивалась строка заголовка, вам необходимо отправить сообщение WM_NCLBUTTONDOWN в окно, передающее HT_CAPTION.константа как wParam.
Например, обработайте событие MouseDown для элемента управления, который нужно «перетаскивать».
if (e.Button == MouseButtons.Left) {
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
Для этого требуются следующие объявления P / Invoke.
const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
Наконец, чтобы получить непрямоугольное окно, вам нужно взглянуть на свойство Region .Вы можете назначить непрямоугольную область для формы, и она будет вырезана в этой области.