Windows Aero: Jakiego koloru malować, aby pojawiło się „szkło”?

Jakiego koloru muszę malować w obszarze roboczym, aby to zrobićszkło zjawić się?

rozszerzyłem ramkę mojego formularza na obszar klienta za pomocą:

DwmExtendFrameIntoClientArea(self.Handle, margins);

nie mogę znaleźć żadnej oficjalnej dokumentacji firmy Microsoft dotyczącej tego, cokolor i / lubalfa DWM będzie szukał możliwości zastąpienia szkła. Dokumentacja dotyczącaDwmExtendFrameInClientArea nawet nie wspomina, że ​​wymagany jest niestandardowy kolor. Jest tylko pogłoska i mit, że specjalny kolor jest nawet wymagany.

Najbliższy, jaki mogę znaleźć, to temat w witrynie MSDN:

Niestandardowa ramka okna przy użyciu DWM

Aby rozszerzone ramki były widoczne, regiony leżące pod każdą z boków rozszerzonej ramki muszą mieć dane pikselowe o wartości alfa 0.

Aktualizacja: I wpis na blogu:

Windows Vista dla programistów - Część 3 - Menedżer okien pulpitu

Tak się składa, że ​​wzór bitowy dla czerni RGB (0x00000000) jest taki sam jak wzór bitowy dla 100% przezroczystego ARGB, dzięki czemu można faktycznie rysować „czarnym” pędzlem GDI i zakładając, że poleciłeś DWM rozmyć pomalowany obszar, wynikiem będzie pożądany efekt szkła.

Jeśli biorę to, co mówią dosłownie (dane pikseli z wartością alfa równą zero), konstruuję kolor z zerową alfą i maluję to w rozszerzonym obszarze:

Color fillColor = Color.FromArgb(0, 0, 0, 0); //(a, r, g, b)
e.Graphics.FillRectangle(new SolidBrush(fillColor), e.ClipRectangle);

ale efekt szkła nie pojawia się:

alt tekst http://i46.tinypic.com/anlmd4.png

Jeśli zignoruję cytowany temat MSDN i zamiast tego użyję całkowicie nieprzezroczystej czerni (zamiast całkowicie przezroczystej czerni):

Color fillColor = Color.FromArgb(255, 0, 0, 0); //(a, r, g, b)
e.Graphics.FillRectangle(new SolidBrush(fillColor), e.ClipRectangle);

pojawia się efekt szkła:

alt tekst http://i45.tinypic.com/2ug2ias.png

jestem wtedy doprowadzony do uwierzenia w tonieprzezroczysty czarny to wartość piksela, której DWM będzie szukał w celu zastąpienia szkła.

Ale jak mam malować?czarne przedmioty na szklanej powierzchni?

testowałem malowanie czerniprostokąt na szklanej powierzchni, za pomocąokrąg obok tego. Co dziwne, prostokątnie pojawiają się, gdy koło się pojawia; oba są tego samego koloru:

Brush b = new SolidBrush(Color.FromArgb(255, 0, 0, 0));
e.Graphics.FillRectangle(b, 11, 11, 32, 32);
e.Graphcis.FillEllipse(b, 43, 11, 32, 32);

alt text http://i49.tinypic.com/aayykk.png

Co się dzieje na świecie? Co to jestwłaściwy kolor do malowania w rozszerzonym obszarze ramki, aby pojawiło się szkło?

Aktualizacja 2

Za pomocąAdisaksugestia, aby dokładnie określić, gdzie głupota Aero żyje, tutaj rysuję czarny prostokąt wewnątrz czarnego koła:

alt tekst http://i47.tinypic.com/5dw861.png

Czy FillEllipse nie obsługuje rysowania czarnych okręgów?

Aktualizacja 3

Pondidum zastanawiałem się, czy zadzwonićGrafika. Wyczyść zprzezroczysty czarny kolor sprawi, że szkło będzie widoczne:

e.Graphics.Clear(Color.FromArgb(0,0,0,0));

Torobi pracuj, ale nadal nie możesz narysować nieprzezroczystych czarnych przedmiotów na szybie:

alt tekst http://i47.tinypic.com/5dw861.png

Aktualizacja 4

Patrzeć naMicrosoft Bridge Vista Library (zarządzane wrapery wokół funkcjonalności Vista, które nie zostaną dodane do .NET), zawsze udaje im się uzyskać rozszerzoną szklaną ramkę działającą na formularzach WPF, a nie WinForm.

Zobacz teżAero: Jak narysować tekst ClearType na szybie?Aero: Jak narysować jednolite kolory na szkle?

questionAnswers(3)

yourAnswerToTheQuestion