PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wxWidgets: Probleme mit Connect



lumbar
08-11-2004, 11:34
Hallo.

Hat hier jemand Beispielcode von Connect wo man auf Membervariablen zugegriffen wird? Ich schaffe es nicht, einen dynamisch erzeugten wxButton mit einer Klasse zu verbinden und in dieser Klasse eine Membervariable zu benutzen.

Folgender Code:

<code>
Connect( id, -1, wxEVT_COMMAND_BUTTON_CLICKED,
( wxObjectEventFunction )( wxEventFunction )( wxCommandEventFunction)
&examenFrame::ButtonClicked );

</code>

"id" ist die wxWindowsId eines wxButton, examenFrame ist die Hauptklasse meines Programmes. In der Methode examenFrame::ButtonClicked kann ich auf keine Membervariable zugreifen, dies führt sofort zum Crash. Der Grund ist, dass die member-variablen falsche Speicheradressen haben. Wenn ich im Kontruktor die Adressen anzeigen lasse und in der Methode ButtonClicked so habe ich folgendes Phänomen: Rufe ich ButtonClicked von Konstruktor aus auf so sind die Speicheradressen identisch und mein Code funktioniert. Rufe ich ButtonClicked aber über die Connect-Methode auf (sprich: Ich klick auf einen Knopf) so stimmen die Speicheradressen nicht überein und das Programm segfaulted.

Dies ist auch der Fall wenn ich mit dynamic_cast und anderen Tricks die Hauptklasse erreiche (GetParent() liefert den Pointer zurück). Auch dann stimmen die Adressen nicht überein...

Ist es nicht möglich, auf member zuzugreifen? Alles was ich will ist, dass das Hauptfenster erfährt, dass ein Button geklickt wurde, welche ID der Button hat und diese ID an eine Member-variable weitergegeben wird...

Danke im Voraus,

Carsten

lumbar
08-11-2004, 14:55
Wenn ich ein Menu dynamisch erzeuge und einen Menueintrag mittels Connect mit der examenFrame-Methode verbinde dann geht das. Es muss also irgendwie daran liegen, dass das Connect-Makro Fehler hat.

KingNothing
15-11-2004, 18:09
Hi,
Was verstehst du unter einem dynamisch erzeugten Button?
Ein Button der durch eine WXR Resource erstellt wird?

warum nutzt du nicht EVT_BUTTON Makros?

lumbar
15-11-2004, 18:47
Hi,
Was verstehst du unter einem dynamisch erzeugten Button?
Ein Button der durch eine WXR Resource erstellt wird?

warum nutzt du nicht EVT_BUTTON Makros?

Dynamisch bedeutet zur Laufzeit erzeugt, bzw. zur Compilierzeit unbekannte Anzahl. Daher kann ich das mit diesem Makro nicht machen. Aber ich habe mittlerweile die Lösung gefunden: Ich habe einen Eventhandler geschrieben und mit PushEventHandler gesetzt.