Aero Glass граничит с всплывающими окнами в C#

Я хотел бы создать всплывающие окна (фиксированного размера) следующим образом:

в моем приложении с использованием C#. Я посмотрел в NativeWindow, но я не уверен, что это правильный способ сделать это. Я хочу, чтобы окно вела себя точно так же, как регулятор громкости или окно "подключения к" в Windows 7.

Как я могу сделать это?

4 ответа

Решение

Я смог сделать это:

if (m.Msg == 0x84 /* WM_NCHITTEST */) {
    m.Result = (IntPtr)1;
    return;
}
base.WndProc(ref m);

Используя WinForms, создайте форму и установите следующее:

Text = "";
FormBorderStyle = Sizable;
ControlBox = false;
MaximizeBox = false;
MinimizeBox = false;
ShowIcon = false;

Редактировать:

Это требует, чтобы окно было значительным, но вы можете немного обмануть. Установите MinimumSize и MaximumSize на желаемый размер. Это предотвратит изменение размера пользователем.

Как предложил Джефф, вы также можете сделать это в CreateParams:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        unchecked
        {
            cp.Style |= (int)0x80000000;    // WS_POPUP
            cp.Style |= 0x40000;            // WS_THICKFRAME
        }
        return cp;
    }
}

В обоих случаях, однако, вы все равно получите размерный курсор при наведении курсора на края. Я не уверен, как предотвратить это.

В ваших CreateParams укажите WS_POPUP и WS_THICKFRAME.

Для предотвращения проклейки курсоров над границами WM_NCHITTEST и когда через границы возвращаются HTBORDER,

Другие вопросы по тегам