Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a form with a border, but no title bar? (like volume control on Windows 7)

Tags:

In Windows 7, the volume mixer windows has a specific style, with a thick, transparent border, but no title bar. How do i recreate that window style in a winforms window?

volume mixer

I tried setting Text to string.Empty, and ControlBox to false, which removes the titlebar, but then the border also disappears:

border disappears

like image 905
oɔɯǝɹ Avatar asked Aug 29 '10 08:08

oɔɯǝɹ


2 Answers

form.Text = string.Empty; form.ControlBox = false; form.FormBorderStyle = FormBorderStyle.SizableToolWindow; 

For a fixed size window, you should still use FormBorderStyle.SizableToolWindow, but you can override the form's WndProc to ignore non-client hit tests (which are used to switch to the sizing cursors):

protected override void WndProc(ref Message message) {     const int WM_NCHITTEST = 0x0084;      if (message.Msg == WM_NCHITTEST)         return;      base.WndProc(ref message); } 

If you want to really enforce the size, you could also set MinimumSize equal to MaximumSize on the form.

like image 89
Chris Schmich Avatar answered Sep 20 '22 09:09

Chris Schmich


Since "This edit was intended to address the author of the post and makes no sense as an edit. It should have been written as a comment or an answer." I present an edit to Chris' answer as a new answer.

The code his answer works as described - except that it also prevents any client area mouse event to occur. You need to return 1 (as in HTCLIENT) to fix that.

protected override void WndProc(ref Message message) {     const int WM_NCHITTEST = 0x0084;     const int HTCLIENT = 0x01;      if (message.Msg == WM_NCHITTEST)     {         message.Result = new IntPtr(HTCLIENT);         return;     }      base.WndProc(ref message); } 
like image 34
Domi Avatar answered Sep 21 '22 09:09

Domi