Kurs C++Builder: Interfejs Win32

W pierwszej części kursu informujemy, jak wykorzystywać funkcje udostępniane przez system operacyjny w ramach Win32 API i krok po kroku prowadzimy przez kolejne etapy budowy przykładowej aplikacji multimedialnej.

W pierwszej części kursu informujemy, jak wykorzystywać funkcje udostępniane przez system operacyjny w ramach Win32 API i krok po kroku prowadzimy przez kolejne etapy budowy przykładowej aplikacji multimedialnej.

Zanim jednak przystąpisz do poznawania interfejsu Win32 i budowy naszej aplikacji, proponujemy, zwłaszcza początkującym programistom, przeczytanie prostego wprowadzenia do programowania w środowisku C++Builder. Dokument ten przedstawia środowisko programistyczne oraz ważniejsze konstrukcje języka i został umieszczony na płycie dołączonej do bieżącego wydania PC World. Natomiast wszystkich już wtajemniczonych zapraszamy do lektury pierwszej części kursu.

Funkcje API

Aplikacje przeznaczone do systemów Windows 9x, Me, NT, 2000 i XP można tworzyć szybko i łatwo, korzystając z funkcji interfejsu programowego Win32 API, którego możliwości zademonstrujemy już w pierwszej aplikacji. API to skrót od Application Programming Interface, czyli Interfejs Programowania Aplikacji. W środowisku C++Builder większość funkcji API dostępna jest za pośrednictwem gotowych i łatwiejszych do wykorzystania komponentów. Nadal możesz jednak odwoływać się do funkcji API bezpośrednio, a nawet czasami będziesz do tego zmuszony - jest ich obecnie ponad 10 tysięcy i komponenty VCL nie mogą objąć wszystkich.

Jedne z podstawowych usług API służą na przykład do wyświetlania okien dialogowych, w których można zapisać lub otworzyć plik albo drukować dokument. Wiele podstawowych funkcji zawarto w bibliotekach dynamicznych, znajdujących się w katalogu systemowym, np.: kernel32.dll, który implementuje jądro systemu, user32.dll - interfejs użytkownika czy gdi32.dll, w którego skład wchodzą funkcje graficzne GDI (niezależnego od sprzętu interfejsu programowania grafiki).

Dodatkowo Microsoft i inni producenci oprogramowania wciąż dodają nowe funkcje i biblioteki. W celu zapoznania się z funkcjami interesującej cię biblioteki możesz się posłużyć się programem narzędziowym impdef, zawartym w pakiecie C++Builder. Za jego pomocą otrzymasz listę funkcji możliwych do wykorzystania w twojej aplikacji.

Uchwyty i komunikaty

Uchwyty są 32-bitowymi liczbami całkowitymi, które służą do identyfikacji niemal wszystkich zasobów systemu operacyjnego Windows, takich jak okna, menu, ikony czy kursory. Sterowanie tymi obiektami odbywa się właśnie za pomocą uchwytów. Z uchwytami będziesz mieć dużo do czynienia, zwłaszcza podczas programowania aplikacji z wykorzystaniem Win32 API, dlatego powinieneś zdawać sobie sprawę ze znaczenia i funkcji, jakie pełnią. Z uchwytami wiąże się też mechanizm wymiany komunikatów między obiektami - uchwyty pełnią funkcję identyfikatorów tych obiektów.

W systemie operacyjnym Windows zawarto standardowe komunikaty, używane zarówno przez aplikacje, jak i sam system. Przykładem jest komunikat o zmianie rozdzielczości ekranu. Przesłanie komunikatu do aplikacji przekazuje jej informację o określonym zdarzeniu.

Przykładowa aplikacja multimedialna

Aby zilustrować powyższe zagadnienia, zbudujemy prosty program wykorzystujący funkcje multimedialne Win32 API. W tym celu otwórz nowy projekt (File | New | Application).

Przejdź do właściwości formularza głównego (Properties) i wpisz następujące ustawienia:

Caption = Odtwarzacz plików multimedialnych

Name = Formularz1

Position = poDesktopCenter

Height = 470

Width = 415

Następnie dodaj komponent o nazwie TMediaPlayer, który odwołuje się do funkcji biblioteki vfw32.dll. W tym celu przejdź do karty System i umieść komponent w formularzu.

Ponownie przejdź do właściwości, lecz tym razem komponentu TMediaPlayer, i wpisz ustawienia:

Name = media

Left = 104

Top = 392

Enabled->Buttons->btEject = false

Enabled->Buttons->btRecord = false

VisibleButtons->btEject = false

VisibleButtons->btRecord = false

Aby pokazać drobną różnicę między posługiwaniem się komponentem VCL a bezpośrednim odwołaniem do Win32, w programie umieścimy możliwość odtwarzania obrazu poprzez VCL i poprzez Win32. Kolejną czynnością jest więc dodanie do formularza komponentu TPanel o nazwie obrazVCL:

Name = obrazVCL i drugiego komponentu TPanel o nazwie obrazWin32:

Name = obrazWin32 na których będziesz wyświetlać obraz. We właściwości Caption usuń wpis, zostawiając puste pole, natomiast pozostałe właściwości ustaw następująco:

BevelOuter = bvNone

Height = 353

Left = 8

Top = 8

Width = 392

Trzeba jeszcze wskazać komponentowi TMediaPlayer obszar formularza, na którym ma wyświetlać obraz. Wybierz więc obiekt TMediaPlayer i w polu właściwości Display wybierz komponent typu TPanel o nazwie obrazVCL.

Następnie umieść w formularzu komponent TOpenDialog, który pozwoli wyświetlać okno dialogowe służące do otwarcia pliku.

W naszej aplikacji odtwarzanie pliku w formatach: WAVE i AVI będziemy uruchamiać osobno, dlatego nie ustawiaj teraz właściwości Filter komponentu TOpenDialog. Będziesz ją zmieniać dynamicznie w zależności od wybranej przez użytkownika opcji. Plik do odtworzenia ma być wybierany za pomocą menu głównego aplikacji. Umieść więc w formularzu komponent TMainMenu z karty Standard. Następnie kliknij dwukrotnie umieszczony właśnie komponent TMainMenu i otrzymasz okno wprowadzania opcji menu.

Każdą opcję wprowadzaj w podświetlonym polu, wpisując ją we właściwości Caption. Każdej opcji zostanie automatycznie przypisana właściwość Name, jednak dla własnej wygody należy wprowadzić swoje nazwy. Zrób to zgodnie z poniższym rysunkiem.

Komponent TMainMenu pozwala przypisać opcjom skróty klawiaturowe. Służy do tego pole ShortCut we właściwości każdej opcji. My wybraliśmy skróty [Ctrl I], [Ctrl O] i [Ctrl P] oraz [Ctrl Q] do zamknięcia aplikacji.

Na tym kończymy projektowanie formularza. Przejdź do okna wpisywania kodu, naciskając klawisz [F12], a następnie zaraz po wierszu:

#include "Unit1.h"

umieść deklarację biblioteki vfw32.dll, która zawiera funkcje Win32 API m.in. do odtwarzania plików AVI:

#include <vfw.h>


Zobacz również