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ä.
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/
Okei.. Saiskos esimerkkiä miten noilla vois pelleillä ilman wxWidgetsiä? Oon kokeillu muutaman kerran mut en oo oikee saanu toimimaan..
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.
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ä. :>
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;Aaa.. Nyt tajuun. Kiitos vastauksesta :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.