- Dział: arts -
winapi/filmy
filmy i animacje w oknie - prosto!
autor: 2004-06-14 napiano:dawid
Wiedziałeś że możesz wyświetlać film/animacje dzięki samemu winapi?Jest jedno ograniczenie:
za jej pomocą można wyświetlać jedynie pliki *.avi.
Zrobimy to w paru prostych krokach, kontrolką-obiektem takim samym jak np. button.
1. Inicjacja kontrolki Użyta przez nas kontrolka nie należy do zestawy standardowo ładowanych do aplikacji. bo i po co np. w kalkulatorze film?
Czy sprawi nam to problem? na szczeście maly
Wystarczy że zainicjujemy ją, podając w strukturze INITCOMMONCONTROLEX wartość ICC_ANIMATE_CLASS.
a robimy to tak:
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof (INITCOMMONCONTROLEX);
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx (&icex);
2. Tworzenie kontrolki
teraz kontrolka jest zainicjomana i możesz ją utworzyć.
aby to zrobić użyjemy: Animate_Create
h = Animate_Create(hWnd, 100, WS_CHILD | WS_VISIBLE | ACS_AUTOPLAY, hInstance);
[opis funkcji: MSDN]gdzie: h - typu HWND to albo uchwyt do naszego okna animacji albo NULL jesli coś nie poszło hWnd - typu HWND jest to uchwyt do okna rodzica, możesz wstawic GetDesktopWindow() 100 - typu int jest to identyfikator jaki ma miec nasze okno, styl: WS_CHILD - czyli nasze okno będzie dzieckiem okna hWnd WS_VISIBLE - okno będzie od razu widoczne ACS_AUTOPLAY - film/animacja będzie odtwarzane od razu hInstance- typu HINSTANCE - możesz tu podac GetModuleHandle() 3. Ładowanie Filmu teraz trzeba załadować animacje do kontrolki.
Zastosujemy funkcję Animation_OpenEx.
Animate_OpenEx(h, hInstance, "film.avi");
[opis makra: MSDN]
gdzie: h - typu HWND to albo uchwyt do naszego okna animacji, otrzymaliśmy go po wywolaniu Animate_Create. hInstance- typu HINSTANCE - możesz tu podac GetModuleHandle() "film.avi" - nazwa lub cała ścieżka do pliku z filmem. 4. Play i Stop.
Jeśli nie nadałeś flagi ACS_AUTOPLAY to do rozpoczęcia odtwarzania możesz użyć Animation_Play
Animate_Play(h, 0, -1, -1);
[opis makra: !BRAK!]
gdzie:
h - typu HWND to albo uchwyt do naszego okna animacji, otrzymaliśmy go po wywolaniu Animate_Create. 0 - od początku filmu
-1 - do konca filmu
-1 - ilość powtórzeń - (dla minus jeden: nieskończona pętla)
Analogicznie Animate_Stop
Animate_Stop(h);
[opis makra: !BRAK!]gdzie:
h - typu HWND to albo uchwyt do naszego okna animacji, otrzymaliśmy go po wywolaniu Animate_Create.