ďťż

Ładny brzuch

Chodzi oczywiście o praktyczne wykorzystanie funkcji DwmExtendFrameIntoClientArea (funkcja znajdująca się w bibliotece "dwmapi.dll" - a plik ten tylko w Windows Vista). Chciałbym zrobić efekt "Sheet of Glass", który po prostu sprawia, że cała forma jest objęta efektem przezroczystości. Tyle że nie wiem, jak to zrobić. Bo funkcja, którą napisałem, wygląda tak:

void TMainForm::SheetOfGlass() { HINSTANCE Handle; Handle = LoadLibrary("dwmapi.dll"); if (Handle != NULL) { DWMEXTENDFRAMEINTOCLIENTAREA DwmExtendFrameIntoClientArea; DwmExtendFrameIntoClientArea = (DWMEXTENDFRAMEINTOCLIENTAREA) GetProcAddress(Handle, "DwmExtendFrameIntoClientArea"); if (DwmExtendFrameIntoClientArea != NULL) { MARGINS margins = {-1}; (*DwmExtendFrameIntoClientArea)(this->Handle, &margins); } FreeLibrary(Handle); } }

Przy wywołaniu takiego kodu, tylko napisy, które są czarne stają się przezroczyste, a forma jest koloru domyślnego. Pisząc to, co wyżej, korzystałem z MSDN Library. Jak uzyskać właściwy efekt (jego przykładem jest okno dodawania gadżetów do sidebara)?
Użytkownik Mek edytował ten post 25 wrzesień 2007, 20:17



Chodzi oczywiście o praktyczne wykorzystanie funkcji DwmExtendFrameIntoClientArea (funkcja znajdująca się w bibliotece "dwmapi.dll" - a plik ten tylko w Windows Vista). Chciałbym zrobić efekt "Sheet of Glass", który po prostu sprawia, że cała forma jest objęta efektem przezroczystości. Tyle że nie wiem, jak to zrobić. Bo funkcja, którą napisałem, wygląda tak:

void TMainForm::SheetOfGlass() { HINSTANCE Handle; Handle = LoadLibrary("dwmapi.dll"); if (Handle != NULL) { DWMEXTENDFRAMEINTOCLIENTAREA DwmExtendFrameIntoClientArea; DwmExtendFrameIntoClientArea = (DWMEXTENDFRAMEINTOCLIENTAREA) GetProcAddress(Handle, "DwmExtendFrameIntoClientArea"); if (DwmExtendFrameIntoClientArea != NULL) { MARGINS margins = {-1}; (*DwmExtendFrameIntoClientArea)(this->Handle, &margins); } FreeLibrary(Handle); } }

Przy wywołaniu takiego kodu, tylko napisy, które są czarne stają się przezroczyste, a forma jest koloru domyślnego. Pisząc to, co wyżej, korzystałem z MSDN Library. Jak uzyskać właściwy efekt (jego przykładem jest okno dodawania gadżetów do sidebara)?


A nie łatwiej byłoby zrobić tak:
Form1->AlphaBlendValue = 150; Form1->AlphaBlend = True;
Gdzie 150 to wartość przezroczystości z zakresu 0-255 (im bliżej 0 tym bardziej przezroczysta forma).
Nie potrzeba biblioteki "dwmapi.dll", no i działa też na starszych systemach od Visty, np: Win XP ;)
Oto przykładowy efekt działania:
http://www.kempa65.y...heetofglass.jpg
Chyba o taki efekt ci chodziło :D

Triki z AlphaBlend znam, ale niestety właśnie nie o to mi chodziło ;)
Myślałem o wykorzystaniu API Windows Vista i utworzeniu efektu szkła, a jak się używa AlphaBlend to po prostu forma zanika i staje się coraz mniej czytelna.

hmm chcąc się zainteresować tym tematem przejrzałem kiedyś net w poszukiwaniu artykułów o DWM i mam parę linków. Ponieważ jeszcze nie zacząłem tego zgłębiać bo póki co muszę napisać część "nie wyglądową" dlatego Ci nie pomogę konkretnie ale właśnie mogę podrzucić znane mi linki. Oto one :
http://msdn2.microso...y/bb325865.aspx
http://msdn2.microso...y/aa969540.aspx
http://msdn2.microso...y/aa383874.aspx
http://shellrevealed...ro/default.aspx
i jeszcze tutaj
http://weblogs.asp.n...ow-manager.aspx
http://weblogs.asp.n...New-Series.aspx
http://www.codeproject.com/vista/ - tu jest zbiór artów o Viście, może znajdzie się też o dwm
http://msdn2.microso...y/aa511258.aspx

tylko powiem szczerze że tylko pobierznie je przeglądałem i też jakiś czas temu, może od tego doszły jakieś nowe ciekawe, nie wiem ale mam nadzieję, że któryś z nich Ci pomoże :)(wiem że w jednym z nich powinien być samples z dwm i on mi działa na kompie :) )

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •