FOX GUI Library - Obsługa komunikatów


Strona główna | Autor | Borland C++ 5.5 | GUI | Książki | OpenGL | Programy | Projekty | Teksty

Obsługa komunikatów

Czas na przykład obsługi komunikatów. Na początek zobaczmy jak skorzystać z komunikatów generowanych przez klasę FXWindow. Z uwagi na dużą ilość generowanych komunikatów program windowmessages.cpp przechwytuje tylko dotyczące myszki i klawiatury.

W głównej klasie programu pojawiły się metody odpowiedzialne za obsługę zdarzeń:

long onSomeCommand(FXObject* sender,FXSelector sel,void *ptr);
Ich nazwy odpowiadają obsługiwanym zdarzeniom, natomiast wyjaśnienia wymagają parametry:

Oto budowa struktury FXEvent:

struct FXAPI FXEvent {
  FXuint      type;           /// Event type
  FXuint      time;           /// Time of last event
  FXint       win_x;          /// Window-relative x-coord
  FXint       win_y;          /// Window-relative y-coord
  FXint       root_x;         /// Root x-coord
  FXint       root_y;         /// Root y-coord
  FXint       state;          /// Keyboard/Modifier state
  FXint       code;           /// Button, Keysym, or mode; DDE Source
  FXString    text;           /// Text of keyboard event
  FXint       last_x;         /// Window-relative x-coord of previous mouse location
  FXint       last_y;         /// Window-relative y-coord of previous mouse location
  FXint       click_x;        /// Window-relative x-coord of mouse press
  FXint       click_y;        /// Window-relative y-coord of mouse press
  FXint       rootclick_x;    /// Root-relative x-coord of mouse press
  FXint       rootclick_y;    /// Root-relative y-coord of mouse press
  FXuint      click_time;     /// Time of mouse button press
  FXuint      click_button;   /// Mouse button pressed
  FXint       click_count;    /// Click-count
  FXbool      moved;          /// Moved cursor since press
  FXRectangle rect;           /// Rectangle
  FXbool      synthetic;      /// True if synthetic expose event
  FXDragType  target;         /// Target drag type being requested
};

Następnym nowym elementem jest tablica komunikatów (ang. message map) WindowMap:

FXDEFMAP(Window) WindowMap[]=
{
  FXMAPFUNC (SEL_LEFTBUTTONPRESS,     FXWindow::ID_NONE,   Window::onLeftBtnPress),
  ...
};

Tablica ta zawiera powiązania łączące:

Rozbudowie uległo także makro FXIMPLEMENT:
FXIMPLEMENT(Window,FXMainWindow,WindowMap,ARRAYNUMBER(WindowMap))

Jako trzeci parametr makra występuje nazwa tablicy komunikatów, zaś ostatnim elementem jest rozmiar tej tablicy.

Okno programu wraz przykładowym komunikatem wyświetlonym na pasku tytułowym przedstawia poniższy rysunek:

WindowMessages


Do pobrania


© Janusz Ganczarski
JanuszG@enter.net.pl