Подтвердить что ты не робот

Как создать форму с границей, но без заголовка? (например, управление громкостью в Windows 7)

В Windows 7 окна объемного микшера имеют определенный стиль, с толстой прозрачной рамкой, но без заголовка. Как восстановить этот стиль окна в окне winforms?

volume mixer

Я попытался установить Text в string.Empty и ControlBox на false, который удаляет заголовок, но затем граница также исчезает:

border disappears

4b9b3361

Ответ 1

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 в форме.

Ответ 2

Поскольку "Это редактирование предназначалось для ответа на автора сообщения и не имеет смысла в качестве редактирования. Оно должно быть написано как комментарий или ответ". Я представляю редактирование ответа Криса в качестве нового ответа.

Код его ответа работает, как описано, за исключением того, что он также предотвращает появление события мыши в клиентской области. Вам нужно вернуть 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);
}

Ответ 3

form.FormBorderStyle = FormBorderStyle.Fixed3D;