Handler gesucht / PropertyPage
-
Und dass die IDs global sind impliziert nicht, dass auch alle Fenster die Button-Clicked Nachricht bekommen. Die musst Du ggfs. schon selbst "weiterrouten".
-
@Tester 2: Volltreffer!
Also es wurde die gleiche Zahl für die Button-ID und ein Editierfeld vergeben. Was kann/muss man da machen?
Ob ich debuggt habe?Hast Du debuggt?
Nun ich habe ein Haltepunkt bei der Funktion, die aufgerufen werden soll gesetzt und dieser wurde beim Klicken nicht erreicht.
Mehrere "OnClicked" für den selben Button geht nicht, ...
meinst du in einer MessageMap oder wirklich nur für ein Button im gesamten Programm? Das meinte jencas wohl auch.
Wie rufe ich denn in einer Klasse eine Funktion in einer anderen Klasse auf?Danke für die Antworten bisher!
Micha
-
Also es wurde die gleiche Zahl für die Button-ID und ein Editierfeld vergeben. Was kann/muss man da machen?
Einfach neu durchnummerieren (Lücken dürfen sein, ID in aufsteigender Reihenfolge), evt. _APS_NEXT_CONTROL_VALUE ganz untern höher setzen und dann unbedingt "Rebuild all" ausführen. Das Ganze geht auch über das Studio (zumindestens ab 2005).
meinst du in einer MessageMap oder wirklich nur für ein Button im gesamten Programm?
In der MessageMap eines Dialoges für ein- und denselben Button
Wie rufe ich denn in einer Klasse eine Funktion in einer anderen Klasse auf?
-Instanz der anderen Klasse anlegen
-public-Methode aufrufen
-
Einfach neu durchnummerieren (Lücken dürfen sein, ID in aufsteigender Reihenfolge), evt. _APS_NEXT_CONTROL_VALUE ganz untern höher setzen und dann unbedingt "Rebuild all" ausführen.
Ich nutze VS 2008. Ist mit "Rebuilt all" das neue Erstellen der Projektmappe gemeint? Ich hab das gemacht nachdem ich die Nummern sortiert und neu vergeben habe. Beim Compilieren gabs keine Proleme aber meim ausführen kommt gleich eine Meldung "Ausnahmefehler in ...mfc\dlgdata.cpp" Also nicht so erfolgreich.
-Instanz der anderen Klasse anlegen
-public-Methode aufrufenhab ich so gemacht:
//CFirstclass.h: CSecondclass *p; //CFirstclass.cpp void CFirstclass::AFunction(){ p->My2ndClassFunction; }Nun springt das Programm in die Funktion und wenn die erste Anweisung ausgefürt werden soll passiert dort ein Fehler: in mfc90nd.dll"Zugriffsverletzung beim Lesen" ähnliche Fehlermeldung beim springen in anderen Funktionen anderer Klassen. Diese Funktionen wurden aber schon durchlaufen und funktionieren(eigentlich).Was mach ich falsch?
-
Was mach ich falsch?
Wenn Du die Variable als Pointer anlegst, musst Du erst mal mit new Speicher anlegen also:
void CFirstclass::AFunction(){ p=new CSecondclass(); p->My2ndClassFunction(); } //und nicht vergessen: //delete pWenn nicht erforderlich, würde ich die Klasse nicht als Pointer anlegen, sondern
//CFirstclass.h: CSecondclass class; //CFirstclass.cpp void CFirstclass::AFunction(){ class.My2ndClassFunction(); }]
"Ausnahmefehler in ...mfc\dlgdata.cpp"
Lsss mich raten: Zeile 42? Zumindes war es so bei Studio2005. Dürfte mit dem Neunummerieren eigentlich nichts zu tun haben. Dann hast Du im DoDataExchange noch eine Variable auf ein Dialogelement, dass gar nicht mehr existiert. Am besten mal debuggen.
-
ES klappt es mit dem springen in andere Funktionen schon besser. Jetzt werden zuweisungen bearbeitet aber bei UpdateData() kommt eine Fehlermeldung bei wincore.cpp Zeile 4004. Bei einer anderen Funktion ist es wingdi.cpp Zeile 1090. Beide male bei IsWindow();
Kann es daran liegen, das ich den Knopf von einer Dialogbar aus drücke und das Fenster evtl. nicht mehr als im Vordergrund angesehen wird und ich es neu im Vordergrund setzen muss?Das Nummerieren war nun erfolgreich. Vieleicht hatte ich beim ersten mal ein Fehler gemacht. Auf das Problem, das die Funktion nicht angesprungen wird hatte es aber keine Auswirkung.
Micha
-
Vermutlich versuchst Du in den Funktionen auf Dialogelemente vor dem OnInitDialog() zuzugreifen.
-
Ich habe ich kein OnInitDialog bei den Dialogseiten.
Ich hab das mal gemacht mit den Aktivsetzen der Fenster, wenn ich die Dialogbar anklicke aber es brachte keine Verbesserung.
Habt ihr noch vorschläge was man machen könnte?Micha
-
Ich habe ich kein OnInitDialog bei den Dialogseiten.
Implizit schon, außerdem könntest Du es einbinden. Du darfst die Funktionen nicht vor den DoModal() aufrufen.
Habt ihr noch vorschläge was man machen könnte?
Ohne zu wissen, was Du wann und wie aufrufst?
-
So! Ich habe es jetzt mit OnInitialUpdate gemacht. Diese Funktion anstelle von UpdateData aufgerufen und dann UpdateData in OnInitialUpdate ausführen hat den Fehler behoben.
Jetzt hab ich noch ein Problem: In einer Dialogseite zeichne ich eine Kurve und trotzdem die Funktion des Zeichnens einer neuen Kurve durchlaufen wird, wird keine Kurve gezeichnet. Kann ich denn irgentwie eine ON_WM_PAINT auslösen damit die Rurve gezeichnet wird?Micha