2009-05-12 3 views
5

Я хотел бы создать всплывающие окна, как это:Aero Glass Границы на всплывающие окна в C#

http://i44.tinypic.com/345bklu.jpg

alt text http://i44.tinypic.com/345bklu.jpg

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

Edit: Я забыл упомянуть, что я хотел бы в окно, чтобы быть фиксированным размером.

ответ

2

Я был в состоянии сделать это:

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

спасибо - это исправлено ошибка с появлением курсора ожидания – zsalzbank

2

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

4

Использование 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; 
    } 
} 

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

+0

Считаете ли вы возможным захват каких-либо оконных сообщений, чтобы отключить курсоры? Спасибо – zsalzbank

+0

@codethis: Я немного оглянулся и ничего не нашел. Тем не менее, все-таки есть способ. –

+0

Мне удалось избавиться от изменения размера, отменив WM_SETCURSOR. защищен переопределение недействительными WndProc (ссылка сообщение м) { , если (m.Msg == 0x20) { m.Result = (IntPtr) 1; возвращение; } base.WndProc (ref m); } Это делает это, но оставляет странный побочный эффект - при наведении курсора на границу появляется курсор ожидания. Затем, когда вы перемещаете его в клиентскую область, он работает правильно. Не знаете, как отправить факс ... – zsalzbank

0

Чтобы предотвратить проклейки курсоров через границу обрабатывать WM_NCHITTEST и когда через границу возврата HTBORDER.