Как создать форму с рамкой, но без заголовка? (например, регулятор громкости в Windows 7)
В Windows 7 окна микшера громкости имеют особый стиль с толстой прозрачной рамкой, но без заголовка. Как мне воссоздать этот стиль окна в окне winforms?
Я попытался установить Text в string.Empty, а ControlBox в false, что удаляет заголовок, но затем граница также исчезает:
3 ответа
form.Text = string.Empty;
form.ControlBox = false;
form.FormBorderStyle = FormBorderStyle.SizableToolWindow;
Для окна фиксированного размера вы все равно должны использовать FormBorderStyle.SizableToolWindow
, но вы можете переопределить форму WndProc
игнорировать не попадания клиентов в тесты (которые используются для переключения на курсоры размеров):
protected override void WndProc(ref Message message)
{
const int WM_NCHITTEST = 0x0084;
if (message.Msg == WM_NCHITTEST)
return;
base.WndProc(ref message);
}
Если вы действительно хотите установить размер, вы также можете установить MinimumSize
равно MaximumSize
на форме.
Поскольку "Это редактирование предназначено для обращения к автору поста и не имеет смысла как редактирование. Оно должно было быть написано как комментарий или ответ". Я представляю правку Криса как новый ответ.
Код, на который он отвечает, работает, как описано, за исключением того, что он также предотвращает любое событие мыши в клиентской области. Вам нужно вернуть 1 (как в HTCLIENT), чтобы это исправить.
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);
}