Gå til innhold

Spørsmål angående C++-syntaks og WxWidgets.


Anbefalte innlegg

Jeg har smelt inn WxWidgets og ser litt på eksemplene. Til minimal.cpp har jeg noen spørsmål som vel egentlig går mer på C++-syntaks:

 

private:
   // any class wishing to process wxWindows events must use this macro
   DECLARE_EVENT_TABLE()

Dette er altså en private funksjon? Eller er det en makro? Den implementeres i alle fall ikke noen andre steder i fila.

 

// the event tables connect the wxWindows events with the functions (event
// handlers) which process them. It can be also done at run-time, but for the
// simple menu events like this the static method is much simpler.
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
   EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
   EVT_MENU(Minimal_About, MyFrame::OnAbout)
END_EVENT_TABLE()

Dette står utenom alle funksjoner og klasser. Hva innebærer det?

 

// frame constructor
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style)
      : wxFrame(NULL, -1, title, pos, size, style)
{

Dette er ligner jo på en konstruktor, men hva gjør den andre linja?

 

#if wxUSE_MENUS
   // create a menu bar

Hvorfor står ikke denne if'en som en vanlig if?

 

    wxString msg;
   msg.Printf( _T("Skal du lagre?\n"));

Jeg går ut i fra at _T er en makro, slik at strengen substitueres med noe annet. For å se nærmere på makroen, hvordan finner jeg hvilken header-fil denne makroen ligger i? Det er veldig mange .h-filer i includes-katalogen.

 

C++-boka som jeg har gir ikke svar...

Lenke til kommentar
Videoannonse
Annonse

private:
  // any class wishing to process wxWindows events must use this macro
  DECLARE_EVENT_TABLE()

Dette er en privat makro. Nøyaktig hva den gjør, derimot, må du finne ut i dokumentasjonen. Det kan virke som at den lager en tabell av et slag som en medlemsvariabel.

 

// the event tables connect the wxWindows events with the functions (event
// handlers) which process them. It can be also done at run-time, but for the
// simple menu events like this the static method is much simpler.
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
  EVT_MENU(Minimal_About, MyFrame::OnAbout)
END_EVENT_TABLE()

 

Nok en gang, makroer. Jeg vil tro de genererer funksjonspekere av noe slag eller noe. Kildekoden eller dokumentasjonen er beste måten å utforske saken nærmere på :)

 

// frame constructor
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style)
     : wxFrame(NULL, -1, title, pos, size, style)
{

Koden etter kolonet kaller baseklassens konstruktør. Dette tillater utvikleren å sende parametere oppover i arv-hierarkiet. Liknende kode brukes også av initialiseringslister.

 

#if wxUSE_MENUS
  // create a menu bar

Denne koden er ikke en C++-if, det er en preprosessor-if. Den behandles altså av preprosessoren, før kildekoden kompileres. Koden mellom #if og #endif kompileres bare hvis wxUSE_MENUS er et definert symbol i preprosessorens symboltabell. Dette tillater utvikleren å velge hvilke deler av kildekoden som skal kompileres og ikke, og brukes ofte til å velge forskjellige implementasjoner av en funksjon, avhengig av målplattform.

 

    wxString msg;
  msg.Printf( _T("Skal du lagre?\n"));

Jeg antar at det er noen inkluderte headere i den filen du kan se gjennom? Det letteste er nok å søke på et eller annet vis -- i Linux ville jeg brukt grep. Hvordan du kan gjøre det på en grei måte i Windows er jeg usikker på, og jeg overlater å svare på akkurat dét til andre.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...