2009-05-12 12 views
5

Chciałbym utworzyć wyskakujących okienek tak:Aero Glass graniczny na Popup systemu Windows w C#

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

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

w mojej aplikacji przy użyciu C#. Zajrzałem do NativeWindow, ale nie jestem pewien, czy to jest właściwy sposób, aby to zrobić. Jak mogę to zrobić. Chcę okno zachowywać się dokładnie tak, jak regulacja głośności lub „łączyć się” oknem w Windows 7.

Edit: Zapomniałam wspomnieć, że chciałbym okno być stałym rozmiarze.

Odpowiedz

2

udało mi się to osiągnąć:

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

dzięki - poprawiono błąd, pokazując wskaźnik oczekiwania – zsalzbank

2

W swoim module CreateParams podaj WS_POPUP i WS_THICKFRAME.

4

Korzystanie WinForms, utworzyć formularz i ustawić:

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

EDIT:

To wymaga okno być spory, ale można oszukać na tym trochę. Ustaw Minimalny rozmiar i Maksymalna wielkość na żądany rozmiar. Zapobiegnie to zmianie rozmiaru użytkownika.

Jak sugeruje Jeff, można również zrobić to w CreateParams:

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

W obu przypadkach jednak nadal będziesz dostać zaklejania kursora po najechaniu na brzegach. Nie jestem pewien, jak temu zapobiec.

+0

Czy sądzisz, że możliwe jest przechwycenie wiadomości o oknach w celu wyłączenia kursorów? Dzięki – zsalzbank

+0

@codethis: Rozejrzałem się trochę i niczego nie znalazłem. Jednak musi być jakiś sposób. –

+0

Byłem w stanie pozbyć się kursora zmiany rozmiaru, anulując WM_SETCURSOR. chroniony ręczne nieważne WndProc (ref wiadomość m) {if (m.Msg == 0x20) { m.Result = (IntPtr) 1; return; } base.WndProc (ref m); } To robi, ale pozostawia dziwny efekt uboczny - po raz pierwszy po najechaniu na granicę pojawia się wskaźnik oczekiwania. Następnie po przeniesieniu go do obszaru roboczego działa poprawnie. Nie wiem, jak to przefaksować ... – zsalzbank

0

Aby zapobiec kursory zaklejania ponad granicami obsłużyć WM_NCHITTEST i gdy ponad granicami powrócić HTBORDER.