LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Biblioteka graficzna Segger STemWin dla STM32 – graficzne HMI bez problemu!

 

 

Funkcja zwrotna (ang. callbackroutine) to taka funkcja, która jest wywoływana automatycznie po wystąpieniu zdarzenia powiązanego z widżetem (i nie tylko) dla którego została ona zdefiniowana. Przykładowo aplikacja z rysunku 6 zawiera cztery przyciski sterujące po naciśnięciu których przycisk z etykietą Button po prawej stronie będzie zmieniał kształt, czcionkę tekstu oraz kolor – to właśnie w funkcji zwrotnej są wywoływane procedury zmieniające dane parametry. Przykładowa struktura takiej funkcji wygląda jak poniżej – można zauważyć, że w zależności od zawartości powiadomienia typu WM_MESSAGE wykonywane są różne czynności.

void Callback(WM_MESSAGE * pMsg){
  switch(pMsg->MsgId){
case WM_CREATE:
.
      .
      .
break;
case WM_PAINT:
.
      .
      .
break;
case WM_SIZE:
.
      .
      .
  break;
default:
_Callback(pMsg);
}

Ogólnie do dyspozycji mamy 22 rodzaje widżetów, które w zupełności powinny wystarczyć do budowy standardowych aplikacji. Niemniej jednak nie jest to jakiekolwiek ograniczenie – biblioteka STemWin umożliwia tworzenie własnych widżetów i można wykorzystać do tego celu procedury rysujące prymitywy (podobnie jak w funkcjach zwrotnych). Wszystko to nie mogłoby poprawnie funkcjonować bez istnienia pewnego mechanizmu jakim jest menedżer okien, dzięki któremu można bez problemów wykonywać dowolne manipulacje nad obiektami widocznymi na wyświetlaczu (można również operować na tym co jest poza widocznym obszarem, gdyż biblioteka posiada funkcję wirtualnych wyświetlaczy) i który jest odpowiedzialny za prezentację tych obiektów w sposób naturalny – głównie chodzi o przesłanianie okien i widżetów, które są ułożone w przestrzeni trójwymiarowej, przy czym użytkownik widzi tylko dwa wymiary.

 

Funkcje graficzne

Prymitywy o jakich wspomniano powyżej są nieodłączną częścią biblioteki i można je stosować na równi z widżetami (tabelka 2). Oprócz standardowych procedur rysujących mamy również do wyboru takie, które korzystają z funkcji AntiAliasing (procedury z przedrostkiem GUI_AA_<Nazwa_Procedury>), która z kolei wygładza wszelkie nierówności krawędzi rysowanych elementów (rysunek 7). Istotnym jest także możliwość wyprowadzania tekstu i do tego celu w bibliotece zaimplementowano kilka procedur; jedne przyjmują wskaźnik do ciągu znaków, a inne – konkretne wartości zmiennych, które chcemy wyświetlić w różnych systemach (tabelka 3). Podobnie jak poprzednio biblioteka oferuje funkcję wygładzania czcionek.

 

Tab. 2. Wybrane procedury biblioteki STemWin powiązane z grafiką 2D

Procedura Opis
GUI_AA_DrawArc() Rysuje wygładzony łuk o zadanym promieniu w zadanym zakresie kątów
GUI_AA_DrawLine() Rysuje wygładzoną linię o zadanych punktach początku i końca
GUI_AA_DrawPolyOutline() Rysuje wygładzony kontur wielokąta opisanego listą punktów
GUI_AA_DrawRoundedRect() Rysuje kontur prostokąta z wygładzonymi zaokrągleniami
GUI_AA_FillCircle() Rysuje wypełnione koło z wygładzonymi krawędziami
GUI_AA_FillPolygon() Rysuje wypełniony wielokąt z wygładzonymi krawędziami
GUI_AA_FillRoundedRect() Rysuje wypełniony prostokąt z wygładzonymi zaokrągleniami
GUI_AA_SetFactor() Ustawia wartość współczynnika funkcji AntiAliasing (od 1 do 6)
GUI_ClearRect() Wypełnia wskazany obszar kolorem tła
GUI_CopyRect() Kopiuje wskazany obszar ekranu
GUI_DrawArc() Rysuje łuk
GUI_DrawBitmap() Rysuje mapę bitową
GUI_DrawCircle() Rysuje kontur koła
GUI_DrawEllipse() Rysuje kontur elipsy
GUI_DrawGraph() Rysuje wykres
GUI_DrawLine() Rysuje linię wyznaczoną przez dwa punkty
GUI_DrawPoint() Rysuje punkt
GUI_DrawPolygon() Rysuje kontur wielokąta
GUI_DrawPolyLine() Rysuje polilinię
GUI_DrawRect() Rysuje kontur prostokąta
GUI_EnableAlpha() Włącza/wyłącza kanał alpha
GUI_FillCircle() Rysuje wypełnione koło
GUI_FillEllipse() Rysuje wypełnioną elipsę
GUI_FillPolygon() Rysuje wypełniony wielokąt
GUI_FillRect() Rysuje wypełniony prostokąt
GUI_InvertRect() Inwertuje kolory wskazanego obszaru ekranu
GUI_RestoreContext() Przywraca kontekst GUI
GUI_RotatePolygon() Obraca wielokąt o zadany kąt
GUI_SaveContext() Zapisuje kontekst GUI
GUI_SetAlpha() Ustawia wartość kanału alpha
GUI_SetDrawMode() Ustawia tryb rysowania (tryb normalny, tryb XOR)
GUI_SetLineStyle() Ustawia styl linii
GUI_SetPenSize() Ustawia rozmiar pióra rysującego w pikselach

 

Kreator GUI oraz symulacja projektu

Pakiet z biblioteką STemWin zawiera narzędzia ułatwiające projektowanie interfejsu graficznego. Pierwsze z nich to GUIBuilder, które pozwala w prosty sposób tworzyć okienka i układać widżety z możliwością ustawiania wymiarów oraz definiowania ich zawartości – do pewnego stopnia (rysunek 9). Narzędzie to przechowuje ustawienia zaprojektowanych okienek w postaci pliku źródłowego z rozszerzeniem .c, a więc w pliku nadającym się do bezpośredniego podłączenia do projektu. Pozostałe narzędzia pozwalają na konwersje obrazków (narzędzie BmpCvt) oraz czcionek (narzędzie FontCvt) do plików z rozszerzeniem .c, w których dane są zapisane w tablicach.

 

 

Rys. 8. Projektowanie interfejsu graficznego z wykorzystaniem narzędzia GUIBuilder

 

W większości przypadków,gdy chcemy sprawdzić wygląd i działanie zaprojektowanej aplikacji graficznej, nie ma potrzeby za każdym razem programować układu. Wystarczy skompilować i uruchomić projekt w środowisku MS Visual C++, który jest dostępny w pakiecie z biblioteką emWin (STemWin niestety nie posiada takiego). Dzięki tej metodzie znacząco zaoszczędzimy czas oraz cykle zapisu pamięci Flash układu.

 

Autor: Jan Szemiet