wxWindows: chytani udalosti rodicem??

Vaclav Slavik v.slavik na volny.cz
Čtvrtek Leden 24 22:39:05 CET 2002


Zdravim,

> Myslel jsem si, ze to udelam pomoci Connect nasledovne:
> 
> wxButton *butoun = new wxButton( this, 100, "Text", atd.);
> butoun->Connect( 100, -1, wxEVT_LEFT_UP, &MyPanel::FunkceNejakaTo);
> 
> To ovsem ponekud nefunguje, i kdyz v prikladech dynamicka vazba byla.

Hmmm, "nefunguje" opravdu neni prilis informativni... Ale Connect() jsem 
nikdy nepouzival, takze s tim neporadim.

> Pak mne napadlo udelat si MyButton jako naslednika wxButtonu, ktery by
> mel funkci OnLeftMouseClick, ktera by tu udalost predavala nejak
> rodicovi a sama nic nedelala. Jenze to se mi pro zmenu nepodarilo prijit
> na to, jakym zpusobem to napsat.

?? Treba takhle:

class Parent : public wxWindow /* or whatever */ {
...
public:
  void HandleLeftClick(wxMouseEvent &event);
};

class MyButton : public wxButton {
  void SetParent(Parent *p) { m_myParent = p; }
  void OnLeftClick(wxMouseEvent &event)
    { m_myParent->HandleLeftClick(event); }
  DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(MyButton, wxButton)
  EVT_LEFT_DOWN(MyButton::OnLeftClick)
END_EVENT_TABLE()

Mimochodem, predelat udalost leveho kliknuti asi neni uplne nejlepsi napad, 
protoze buttony uz na leve tlacitko reaguji standardne (poslanim EVT_BUTTON 
zpravy). Muze se stat, ze na nektere platforme se ani EVT_LEFT_DOWN 
nevygeneruje, proste protoze nativni toolkit neumozni prepsani handleru 
(nevim, jaka je situace ve wxGTK resp. GTK+ -- zkuste to a pokud ten 
(pseudo)kod nahore nefunguje (OnLeftClick se nezavola), tak je to proste 
smula).

> PS: jak se da udelat okno, u ktereho by nebylo mozno zmenit velikost ?
> Hledal jsem neco jako wxNO_RESIZE ale bez uspechu...

Proste konstruktoru wxFrame NEdate style wxRESIZE_BOX ani wxRESIZE_BORDER.

Jinak doporucuji prihlasit se do konference wx-users na lists.wxwindows.org, 
tam mate podstatne lepsi sanci dostat odpoved (prihlaseni se viz 
http://lists.wxwindows.org).

mejte se,
Vaclav Slavik <vaclav na wxwindows.org>



Další informace o konferenci Linux