Aero Glass граничит с всплывающими окнами в C # - PullRequest
5 голосов
/ 12 мая 2009

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

pop-up windows

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

Как мне это сделать?

Ответы [ 4 ]

4 голосов
/ 12 мая 2009

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

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

Edit:

Это требует, чтобы окно было значительным, но вы можете немного обмануть. Установите 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;
    }
}

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

2 голосов
/ 22 мая 2009

Мне удалось сделать это:

if (m.Msg == 0x84 /* WM_NCHITTEST */) {
    m.Result = (IntPtr)1;
    return;
}
base.WndProc(ref m);
2 голосов
/ 12 мая 2009

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

0 голосов
/ 04 января 2010

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

...