Dokumentacja i przykłady API do rysowania na Windows Aero Glass (DWM, GDI, GDI+) dla wszystkich programistów Win32

Szukam dobrych zasobów do nauki korzystania z API Win32 / GDI lub cokolwiek innego, aby rysować i malować bezpośrednio za pomocą API Win32 do szklanej formy.

Kiedy używam Delphi, otagowałem to jako Delphi lub Visual C++. Wszelkie próbki kodu i artykuły, które można znaleźć, będą mile widziane. Artykuły MSDN nie wydają się być napisane na ten temat.

Jako cel, wyobraźmy sobie, że chcesz albo: (a) odtworzyć to, co robi Google Chrome (karty jako część szkła ramka) (b) odtworzyć to, co robi MS Office 2010 (przycisk Zapisz na szklanej ramce, o którym mowa w MFC dla VS 2010, jako "pasek narzędzi szybkiego dostępu" (patrz rysunek poniżej).

Nie używam MFC, ale jeśli zbadanie źródeł MFC byłoby dobrym źródłem informacji, jestem ciekaw, gdzie w źródłach MFC lub oryginalnych źródłach BCG (mam oba) są zaimplementowane szybki dostęp do paska renderowania / malowania kodu.

alt text

Update: odnośnik neato z jednej z poniższych odpowiedzi pokazuje komunikat NC (nonclient) Paint i jak sobie z nim poradzić podczas malowania na szklanej ramce oraz artykuł MSDN o tym tutaj .

Author: Frédéric Hamidi, 2010-09-29

5 answers

Jest to podzbiór mojego folderu" szklane " zakładki, wynik partii badań / poszukiwań na ten temat. Okazało się, że wszystko to jest przydatne do nauki o szkle i rozwiązywania różnych problemów na jego podstawie. Większość z nich obejmuje Kod Delphi, ale zauważyłem, gdzie jest dla innego języka.

Linki szklane zwykłe

  • używanie przezroczystych okien z Delphi : dobre wprowadzenie (od samych podstaw) do używania szkła w Delphi formularze
  • własne rysowanie na szkle : opisuje jak narysować bitmapę lub inny obraz na szklanym obszarze okna. Obejmuje również kanały Alfa itp., dobry przegląd
  • używanie szkła w projekcie VC++ : obejmuje włączanie szkła, rysowanie tekstu, obsługę powiadomień itp. - dobre ogólne wprowadzenie do tego, jak to działa. Wiele podstawowych szczegółów jest obsługiwanych przez VCL (np. własność GlassFrame i tform wewnętrzne dbają o wiele tego), ale jest to bardzo przydatne do zrozumienia podstaw implementacji na poziomie API w każdym razie
  • Jak rysować na obszarze innym niż klient: pokazuje, jak narysować coś takiego jak pasek narzędzi Office na pasku tytułu. Kod. net, ale tłumaczalny
  • Konfiguracja niestandardowego paska tytułu: bardzo szczegółowy artykuł o rysowaniu poza obszarem klienta (w Delphi, więc kod Delphi). Następnie część 2 , która pokazuje całkowite przejęcie całego okna i naśladowanie standardu pasek tytułowy. te dwa artykuły pozwolą Ci naśladować Office i Chrome, jak prosiłeś w pytaniu
  • Jak skonfigurować różne elementy sterujące VCL, aby działały najlepiej na obszarze szkła: VCL nie obsługuje zbyt dobrze szkła. Często otrzymujesz artefakty lub elementy sterujące po prostu nie rysują poprawnie, bez względu na to, co zrobisz, aby je rozwiązać. W tym artykule wymieniono podstawowe komponenty wizualne VCL (etykiety, przyciski, paski postępu itp.) i co skonfigurować dla każdego z nich, aby rysuj idealnie, lub przynajmniej "jak najlepiej", gdy są umieszczone na szklanym obszarze

Zaawansowane, lub pokrewne stycznie:

 20
Author: David M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-30 04:19:14

Te posty na rysowaniu niestandardowego paska tytułu Pod Vista / Windows 7 mogą Cię zainteresować.

Przykładowy obraz:

Próbka

 6
Author: Uli Gerhardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 14:30:27

Jestem pewien, że znalazłeś stronę MSDN o DWM . Zawiera wiele tematów i kilka przykładów. Niektóre z artykułów "overview" zawierają przykłady (np. rozmycie DWM za Overview ).

Niestety, poza dokumentacją, jest kilka cennych dobrych artykułów. Możesz zacząć od używając glass na codeproject, i przyjrzeć się wykrywaniu glass w delphi - potem korzystanie z funkcji prosto z dokumentów nie jest takie złe. Na szczęście w praktyce wszystkie są całkiem proste.

 5
Author: Philip Rieck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-29 14:45:23

Dobra strona dla elementów szklanych, w tym szklany guzik:

Http://rmklever.com/

 2
Author: Warren P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-30 01:39:12
 0
Author: Leonardo Herrera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-29 22:22:16