Image222 (3)

Image222 (3)



Programowanie ■

indeksu. Normalnie funkcje te powinny zwracać wartość 0. Jeśli jednak znajdujemy się na skrajnej pozycji menu i przemieszczenie nie zostało wykonane - zwracana jest wartość 1.

Przy przesuwaniu kursora w dół musimy się także liczyć z możliwością, że możemy mieć menu o długości krótszej niż liczba linii wyświetlacza. Stąd, na listingu 137, bierze się badanie końca menu w pętli for na kolejnych możliwych pozycjach.

Korzystanie z menu

0    ile konstrukcja jest dość rozbudowana, to korzystanie z utworzonego menu jest łatwe

1    przyjemne. Listing 138 pokazuje tworzenie w pamięci programu tablicy opisującej nasze menu. Umieść ją w pliku app.c. Zauważ, że korzystamy tutaj z nowych napisów, które musisz dodać do programu. Napisy IDS Pozl, IDS_Poz2 w moim przypadku miały tak proste nazwy jak „Pozycja \'\ „Pozycja 2”. Ponadto używamy także domyślnej funkcji rysującej pozycje menu. Ponieważ możemy często z niej korzystać, dobrze jest uczynić ją częścią systemu. Jej postać pokazuje listing 139.

Aby menu zostało wyświetlone, można posłużyć się kodem z listingu 140. Kod ten możesz wprowadzić zamiast dotychczasowgo testowania przycisków w pliku app.c.

Pokazuje to. że od strony używania nasze menu jest dość sympatyczne w obsłudze.

Listing 131 - obsługa timelów programowych w przerwaniu Hitlera systemowego

for(a«Ó; a<ELEMS ([system rimer); a-ł-f)

(

struct system_timer* p? *

systera^iimer + aj 1 f (pT ->mode =

SY3TEM_TIMER_MOCEONESHOT)

(

if(pT->cnt I- 0)

1

-C?T->cnt);

1f(pT->cnt *= 0)

system_nsgPut(iDM_T.MiHO+a);


else if(pT->mode —

SYSTEM TIMER M0DEFR2ERUN)


0)


pT->cnt • pT->start; 3y3tem_megPut (lDM_TIMER04-a) ;


else


// Generowanie opozmeń

(...)


Listing 133 - typy danych potrzebne do obsługi menu

// Typ danej pozycji menu typedef enum menuiTEM_rype {

MENUT_ENDf

MENUT_POPUP,

MENUT_FUNC

jMENU.TiMJTYPE;

// Wygląd funkcji rysowania pozycji typedef void (*MENUiTEM_DrawProc)(FiLE*/*streamV. uintl6_t/*idName*/):

//' wygląd funkcji wywoływanej na naciśnięcie przycisku // Jeśli zwróci wartość !• 0 - menu zostanie zakończone typedef uint8_tC*MENUirEM_OaSelecL>(uin-8_t /*curposV);

// System menu - określenie struktury pozycji typedef struct menuitem {

MRNll T TFM_TY PR typ®; uint8_t idNameJ MENUITEM_DrawProc DrawProcf union {

struct menuitem* psudmenu;

MENUirEM_OnSeIect OnSelectProc; łdataj

}menuitem, menuiten_? progmek:


Listing 135- komendy IDM MENl'...


Listing 132 - komunikaty ł i nu* rów


#define IDM_MENU_CHAMGF TRM.SWnOWN tfdefine idm_menu_Chavjger idm_swdown_repeat #define idm_mcnu_ok    idm_swup_short

tfdefine idm_menu_esc    idm_swup_hold

#dcfinc idm_timer0 10 dfdefirie IDM_TIMERl 11 #define IDM_TIMER2 12

Listing 134 - pierwszy poziom obsługi menu

uint8 t system menu (MEMUITEM P* pmer.u) {

uint8_t index ■» 0;

SWitch(msg)

{

case idm menu change:

uint8_t curpos - 0;

// kierunek przesówania

case idm menu ciianger:

system LimerReset(0);

ulnt8_t dir ** 0;

ifOiiO

uint8 t kbd repeat last;

1

if(systeir menuUp(pmenu,

// Pręckość repetycji (wolno)

&index, fircurpos))

kbd rp.peaf last = systeir. kbdSetRepeatSpaed(8);

{

system rtenuUown (pmenu,

// Inicjacja timera oroqramowego

cystern timerSet(0, SYSTEM TIMEF MODEONESHOT,

&index, Acurpor.);

MENU_CHANCEDIR, 0) J

<ii y = 0;

1

1

for(;;)

else

u-.nt8 t nsg;

(... analogicznie jak “góra")

break;

Icd Cis O I

case idmtimero:

// Rysowanie elementów

dir - !dir;

syetem menjDrówIterrs (pmenu, index);

break;

// Wyrysowanie kursora

}

led GoTo(0, curpos);

}

fputc(system cuksor, leć GetFileO);

// Odmalowanie wyświetlacza

cleonup!

led Upda:e();

// Przywrócenie ustawień

system kbćŁ>et.*<epeatSpeed(Kbd repeat last);

// Oczekiwanie na komunikaty

return 0;

msg = systenmsgWaitFor();

}


Elektronika dla Wszystkich Sierpień 2006


45



Wyszukiwarka

Podobne podstrony:
Image212 Programowanie ■ W C parametry do funkcji przekazywane są przez wartość. Oznacza to, że
Image223 (4) ■ ProgramowaniePodmenu oraz wywoływanie funkcjiNasze menu aktualnie się wyświetla, ale
CCF20131029021 61 III. Typy wydań i narzędzia pracy: przypisy, indeksy, bibliografie... Słowa te po
Funkcje biblioteki mysql Funkcje bilioteki mysqli Zwracana wartość mysq l_co n nect (serwer,
Poznaj C++ w$ godziny0075 Funkcje 61Rysunek 5.3 typ zwracanej wartości
VBA str i Wartości przycisków zwracane prez funkcję MsgBox Pobieranie zwracanych wartości z okna d
79 FUNKCJA MAIN() return zwracana.wartość; lub dla procedur: return; Funkcja main() Do tej pory we
Image245 Programowanie ABC... C Jak działają strumienie? Pamiętasz, jak do tej pcry obsługiwaliśmy n
skanowanie0025 2 Imałż i ślimakKrok po kroku:ślimak Uformuj z plasteliny takie kawałki jak te, które
Zadanie 4.2 (3 pkt.) Jak długo obiega tę planetę satelita znajdujący się na wysokości równej promien

więcej podobnych podstron