Wstęp
Aktualności
Bill egzekutywuje
Fleecy wyjaśnia
Spotkanie w Reading
Listy
Kuferek
Prenumerata

Internetowy dom
Jak szukać

Mikser AUDIO
Transmeta
Karta 68060 DCE

Moje boje z OS 3.5
Storm Mesa (4)
DeluxePaint I
DeluxePaint II
DeluxePaint III
DeluxePaint IV
DeluxePaint V
IBrowse 2.1

Co słychać
Kabuki Dash
Max Rally

Historia MA (cz. 2)
Życie po fazie

Kurs języka C

 

nasz e-mail

Copyrights by MMM 2000
All rights reserved.

 

Odcinek nr 11


Spis treści kursu

Górne menu (2)

W tym odcinku znajdziecie omówienie listingu nr 11.

W elemencie zawierającym opis pozycji "Zwykły" nm_MutualExclude ma wartość 8|16|32, co oznacza wysterowane bity 3, 4 i 5, tak więc wybranie tej pozycji spowoduje wyczyszczenie "fajeczek" w pozycjach "Wytłuszczony", "Kursywa" i "Podkreślony" (bo "Tryb" ma numer 0, BARLABEL 1, "Zwykły" 2 itd). Te trzy ("Wytłuszczony", ...) pozycje mają "nm_MutualExclude" równe 4, ich wybranie powoduje więc wyczyszczenie tylko pozycji "Zwykły" -- mogą więc być jednocześnie zaznaczone, np. "Podkreślony" i "Kursywa".

Jak zapewne wiecie, system umożliwia wybranie więcej niż jednej pozycji na raz -- robi się to klikając kolejno lewym przyciskiem na kilku pozycjach i trzymając równocześnie przez cały czas wciśnięty prawy przycisk. Program nie dostaje jednak w takim wypadku kilku wiadomości IDCMP_MENUPICK: dostaje tylko jedną, a w polu "NextSelect" wybranego "MenuItem" znajduje się numer kolejnej wybranej pozycji bądˇ MENUNULL, gdy jest to ostatnia wybrana pozycja.


Listing nr 11

Informacje zapisane w strukturze "NewMenu" w polu "nm_UserData" uzyskuje się ze struktur "Menu" bądˇ "MenuItem" za pomocą makr preprocesora, zdefiniowanych w pliku "libraries/gadtools.h" -- odpowiednio GTMENU_USERDATA() i GTMENUITEM_USERDATA(). W pola "nm_UserData" wstawiliśmy adresy napisów, które wypisywane są na konsoli, gdy użytkownik wybierze daną pozycję/podpozycję. Jest to rozwiązanie dużo bardziej eleganckie i krótsze niż np. użycie instrukcji "switch" do analizowania pola "Code" struktury "IntuiMessage". Wybranie pozycji "Normalny", "Wytłuszczony", "Kursywa" lub "Podkreślony" powoduje wypisanie napisu, zawierającego kody sterujące, które powodują zmianę atrybutów konsoli - są one opisane w dostarczanej wraz z Amigami instrukcji obsługi Workbencha (w rozdziale o drukowaniu), darujemy więc sobie tutaj ich opis.

W listingu wykorzystaliśmy też makro FULLMENUNUM(), zdefiniowane w "intuition/intuition.h". Jest ono przeciwieństwem poznanych wcześniej makr MENUNUM(), ITEMNUM() i SUBNUM(). Oczekuje ono trzech argumentów: numeru menu, pozycji w menu i podpozycji -- koduje podane parametry w taki sam sposób, w jaki zakodowane jest pole "Code".

Listing ukazuje również, w jaki sposób można sprawdzić, czy dana pozycja jest "zafajeczkowana", czy też nie. Sprawdza się to, analizując pole "Flags" w strukturze "MenuItem", opisującej daną pozycjęę (adres tej struktury uzyskujemy za pomocą ItemAddress() i FULLMENUNUM()) -- jest ono niemal dokładnym odpowiednikiem pola "nm_Flags" w strukturze "NewMenu". Należy po prostu sprawdzić, czy wśród flag znajduje się CHECKED.

Aby opis programowania menu uczynię niemal kompletnym, trzeba wspomnieć o jeszcze dwóch, nie użytych przez nas funkcjach:

void OnMenu( struct Window *window, unsigned long menuNumber );

void OffMenu( struct Window *window, unsigned long menuNumber );

Powodują one odpowiednio włączenie bądˇ wyłączenie (tj. "zamglenie") menu bądˇ pozycji/podpozycji. To, czy menu albo pozycja/podpozycja jest w danej chwili włączona, można sprawdzić, analizując pole "Flags" struktur "Menu" bądˇ "MenuItem" pod kątem flag odpowiednio "MenuEnabled" lub "ItemEnabled".

W następnej części "odpoczniemy" sobie nieco od graficznego interfejsu użytkownika. Zajmiemy się przydzielaniem pamięci i systemowymi listami. A za dwa miesiące: gadżety.



Spis zawartości kursu języka C:

  1. Początki
  2. Okno na szary świat
  3. Otwieranie ekranów
  4. Otwieranie ekranów (2)
  5. Malowanie po ekranie
  6. Malowanie po ekranie (cz. 2)
  7. Malowania ciąg dalszy
  8. Pisania ciąg dalszy
  9. Na skutek "wyparowania" tekstu (rafałek rulez:) odcinka o numerze 9 nie było...
  10. Górne menu
  11. Górne menu (2)
  12. Zarządzanie pamięcią
  13. Gadżety
  14. Gadżety (2)
  15. Gadżety (3)
  16. Gadżety (4)
  17. Gadżety (5)
  18. Pliki
  19. Na skutek pomyłki w numeracji (rafałek rulez:) - nastąpił przeskok w numeracji kursu "c dla każdego" co można sprawdzic w archiwalnych odcinkach MA. Odcinka nr 19 nie było.
  20. Przekazywanie argumentów
  21. Start inaczej
  22. DOS
  23. Pomocy!
  24. Pomocy! - (2)
  25. ASL
  26. Ulepszanie systemu - commodity (cz. 1)
  27. Ulepszanie systemu (cz. 2.)
  28. Ulepszanie systemu (cz. 3.)
  29. Drukowanie
  30. Drukowanie (2)
  31. Własna biblioteka (cz. 1)
  32. Własna biblioteka (cz.2)
  33. Aplikacje workbencha
  34. IFF cz.1
  35. IFF cz. 2