Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: wxWidgets, DECLARE_EVENT_TABLE()

crafn [22.04.2007 19:51:07]

#

Joo. On tässä tullu koodailtua wxWidgetsillä ja ruvennu ihmetyttää nämä pätkät:

DECLARE_EVENT_TABLE()
IMPLEMENT_APP(MainApp)
BEGIN_EVENT_TABLE(MainFrame, wxFrame)
   EVT_MENU(ID_MAINWIN_QUIT, MainFrame::OnQuit)
END_EVENT_TABLE()

Mistään en ole löytänyt ohjeita miten noita käytetään ja miten. Osaisiko joku selventää minulle noiden käyttöä ja merkitystä.

Markus [22.04.2007 21:09:01]

#

IMPLEMENT_APP(MainApp) - makro luo ohjelmallesi pääsilmukan (ja pääfunktion). Se on silmukka, josta ohjelma ei poistu ennen kuin pääikkuna on suljettu.
Kääntämisessä makro laventuu siis joksikin tamän tapaiseksi:

void main()
{
  while (...)
  {
   ...
  }
}

DECLARE_EVENT_TABLE ja BEGIN_EVENT_TABLE liittyvät tapahtumien käsittelyyn. Aina, kun käyttäjä painaa jotakin nappia, valitsee valikosta jotain, jne.. kutsuu wxWidgets jotain määrittelemääsi tapahtuman käsittely funktiota.
Tapahtuman käsittelyyn käytettävä funktio määrätään Connect()-metodin avulla vähän tähän tapaan:

widget->Connect(funktion_nimi)

Nyt aina, kun widgetissä tapahtuu jotain (esim. sitä klikataan), kutsutaan antamaasi funktiota. Connect-metodin kutsuminen jokaiselle widgetille ei kuitenkaan ole kovin eleganttia ja voit helpottaa urakkaa DECLARE_EVENT_TABLE ja BEGIN_EVENT_TABLE -makrojen avulla. Näiden makrojen käytöstä tarkemmin tässä ohjeessa: http://www.wxwidgets.org/manuals/stable/wx_eventhandlingoverview.html­#eventhandlingoverview

crafn [26.04.2007 14:27:04]

#

Okei.. Saiskos esimerkkiä miten noilla vois pelleillä ilman wxWidgetsiä? Oon kokeillu muutaman kerran mut en oo oikee saanu toimimaan..

Markus [26.04.2007 15:22:37]

#

Kyseessä ovat nimenomaan wxWidgets kirjaston tarjoamat makrot. Et voi käyttää niitä ilman wxWidgets:iä.

Lyhin mahdollinen wxWidgets ohjelma kuitenkin näyttää tältä:

#include <wx/wx.h>

class MainApp: public wxApp
{
  public:
    int dymmy;
};

IMPLEMENT_APP(MainApp)

Ohjelma ei tee mitään vaan jää ikuiseen silmukkaan.

crafn [26.04.2007 19:24:48]

#

Okei, kiitos vastauksesta.
edit: Semmosta piti viel kysyä et tiedätkö kuinka nuo toimii?
Siis että miten voisi itse väsätä samantapaiset ku teen itte kans nappulointisysteemiä. :>

Metabolix [30.04.2007 01:18:56]

#

Miten niin kuinka nuo toimivat? Ihan kuten makrot yleensäkin. Niiden lähdekoodi on ihan wx:n omissa otsikoissa, sieltä voit tutkia. Ne ovat kuitenkin luultavasti niin erikoistuneita omaan tehtäväänsä, että et välttämättä saa niistä paljonkaan irti. (Voin toki erehtyä, kun en vaivautunut katsomaan.)

Periaatteessa kuitenkin siis makrot toimivat tähän tapaan:

#define juttu(a, b, c) /* Rivin loppuun aina jatkomerkki eli \ */ \
struct sellainen_ ## a { \
    b *osoitin; \
    b taulukko[c]; \
};

// Käytetään makroa, esikääntäjä siis laajentaa sen tähän.
juttu(inttiviritys, int, 10)

// ***
// Lopputulos on siis tämä:
struct sellainen_inttiviritys {
    int *osoitin;
    int taulukko[10];
};

// ***
// Ja nyt sitä voi käyttää
struct sellainen_inttiviritys koepala;
koepala.osoitin = &jokuluku;
koepala.taulukko[7] = *koepala.osoitin;

crafn [01.05.2007 20:49:45]

#

Aaa.. Nyt tajuun. Kiitos vastauksesta :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta