C++ GUI
minicrispie
- programmiertechnik
Hallo,
vor kurzem habe ich angefangen, eine eigene GUI in C++ zu schreiben. Das Funktioniert zumindest schon mal ein bisschen. Ich kann schon ein Button hinzufügen, und für diesen die Events verwalten.
Das funktioniert aber nur mit einem Button so gut. Sobald ich mehrere Buttons habe( ich habs mit 2 getestet ), so stürtzt das Programm am Ende ab( also wirklich ganz am Ende des Programmes ).
Folgender Aufbau der GUI( gekürzt ):
//Die Klasse verwaltet alles für ein Element
class _gui_element
{
private:
// (alle Valiablen und Strukturen)...
public:
//Jegliche Methoden
};
//Diese Klasse ist die Hauptklasse
class _gui
{
private:
int number; //Die Anzahl aller Elemente in der GUI.
public:
_gui_element *elems; //Das Element-Array in dem die Eigenschaften aller Elemente stehn
//Methoden
_gui ( void ); //Konstruktor
~_gui ( void ); //Destruktor
int createElement( int type ); //Erzeugt ein neues Element
};
//Die Methoden der Klasse _gui
_gui::_gui( void )
{
_gui::number = 0;
_gui::elems = NULL;
_gui::isElementActive = false;
_gui::ActiveElementId = -1;
}
_gui::~_gui( void )
{
_gui::number = 0;
_gui::isElementActive = false;
_gui::ActiveElementId = -1;
//Elemente löschen
}
int _gui::createElement( int type )
{
int element_id = -1;
//Prüfen, ob der Typ gültig ist
if( type >= 1 && type <= 1 ) // Bis jetzt ist es nur ein Element
{
//Das Array um ein Element erweitern
_gui::elems = (_gui_element *) realloc( _gui::elems, ( ( _gui::number + 1 ) * sizeof(_gui_element) ) );
if( _gui::elems != NULL )
{
element_id = _gui::number; //Die ID übernehmen
_gui::elems[element_id].reset( type ); //Eine extra Funktion setzt alle Werte des Elementes zurück, da der Konstruktor irgendwie nicht aufgerufen wird.
_gui::number++; //Die Anzahl an Elementen erhöhen
}
}
//Die ID des Elementes zurückgeben
return element_id;
}
/*******************\
Hauptfunktion
\*******************/
int main()
{
//bool beenden = false;
int newElem = document.createElement( BUTTON );
document.getElementById( newElem ).setBackground( 93, 51, 10 );
document.getElementById( newElem ).setPosition( 50, 50 );
newElem = document.createElement( BUTTON );
document.getElementById( newElem ).setBackground( 93, 51, 10 );
document.getElementById( newElem ).setPosition( 50, 80 );
while( !keypressed() ) //while( !beenden )
{
//...
}
//Selbst hier funktioniert das Programm noch
return 0;
}
Da das Programm wirklich erst zum Schluss abstürzt( Vista Fehlermeldung: "Das Progarmm funktioniert nicht mehr..." ), denke ich, das es am Destruktor von "_gui" liegt. Nur was mache ich da falsch?
Ich hab schon "delete _gui::elems" und "free( _gui::elems )" versucht. Ich hab das freigeben auch schon weggelassen.
Bzw. mache ich etwas bei der Speicherreservierung( _gui::createElement() ) falsch?
Danke schonmal im voraus!
MfG. Christoph Ludwig
int newElem = document.createElement( BUTTON );
document.getElementById( newElem ).setBackground( 93, 51, 10 );
document.getElementById( newElem ).setPosition( 50, 50 );
hab ich vergessen:
Folgendes Makro existiert auch noch:
#define getElementById(x) elems[x]
Außerdem wird die GUI global angelegt:
_gui document;
MfG. Christoph Ludwig