CView ruft in CDialog Funktion auf
-
Hallo und gutes neues Jahr,
ich habe eine MFC Anwendung, die als Basis-klasse CHtmlView hat. Im Programm gibt es zusetzlich einen Dialogfenster (CAnalyse). Wenn des Dialogfenster geöffnet ist, wird einen Link zusammengebaut und im CE_LearnView geöffnet mit:
CView *ptr = ((CFrameWnd *)AfxGetMainWnd())->GetActiveView(); if( ptr && ptr->IsKindOf(RUNTIME_CLASS(CE_LearnView) )) { ((CE_LearnView *)ptr)->Aktualisieren(strLink); }
!!! DER DIALOGFENSTER IST IMMER NOCH OFFEN !!!
Das Dialogfenster hat eine Fortschrittanzeige. Die Werte in der Fortschrittanzeige setze ich mit der Funktion:void CAnalyse::FortschritanzeigeSetzen(int Position) { m_cFortschrittsanzeige.SetPos(Position); }
Wie könnte ich die Funktion FortschritanzeigeSetzen(int Position) im CAnalyse (Dialogfenster) von der Klasse CE_LearnView aufrufen ??
-
Du müsstest irgendwo noch einen Pointer auf deinen Dialog haben (möglicherweise als Member deiner View-Klasse) - also kannst du über diesen Pointer die Dialog-Methoden aufrufen.
-
Ich habe geschrieben:
// CE_LearnView.h class CE_LearnView : public CHtmlView{ ..... public: CAnalyse* ptrAnalyse; }
Und dann im:
// E_LearnView.cpp void CE_LearnView::Aktualisieren(CString Link) { ....... ptrAnalyse->FortschrittanzeigeSetzen(80); }
An dieser Stelle bringt das Programm Fehlermeldung.
Was habe ich falsch gemacht ??
-
Setz mal einen Breakpoint dahin und schau nach, ob dort ein sinnvoller Wert drinsteht (du solltest die Methode nicht aufrufen, bevor du den Dialog angelegt hast).
-
Es ist für mich schwer zu verstehen, was damit gemeint ist.
Unter:
du solltest die Methode nicht aufrufen, bevor du den Dialog angelegt hast
Verstehe ich das Dialogfenster geöffnet sein soll damit der Zeiger auf im zeigen kann.
Der Debager hat mir gezeigt, dass die Adrese auf der ich verweise ungültig ist.
Könntest du mir biite weiter helfen???
-
CStoll meint, dass dein Dialogfenster auch erstellt sein muss auf deinem, ansonsten kracht es.
Wenn du deine Fortschrittsanzeige benutzt, ohne das diese erstellt wurde(es geht um das Erstellen des Windows-Fensters, nicht um das Erstellen der Klasse), dann kracht es.