Don_Pazo Geschrieben 12. Januar 2006 Geschrieben 12. Januar 2006 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 ?? Zitieren
Klotzkopp Geschrieben 12. Januar 2006 Geschrieben 12. Januar 2006 Du brauchst an dieser Stelle die Instanz von CAnalyse, die du angezeigt hast, oder eine Referenz oder einen Zeiger darauf. Nur darüber kannst du eine Methode aufrufen. Wo wird denn dieser Dialog erzeugt? Zitieren
Don_Pazo Geschrieben 12. Januar 2006 Autor Geschrieben 12. Januar 2006 Das Programm wird gestartet, dann zusätzlich wird des Dialogfenster (CAnalyse) gestartet. Wenn man dann im Dialogfenster auf BUTTON "Verbinden" klickt wird eine Webseite im Hauptfenster (CE_LearnView)geladen, aber der Dialogfenster (CAnalyse) bleibt offen. Meine Idee war, das in Dialogfenster (CAnalyse) ein Fortschrittanzeiger gibt. Er bekommt seine Werte von der Klasse CE_LearnVeiw. Zitieren
Klotzkopp Geschrieben 12. Januar 2006 Geschrieben 12. Januar 2006 Du willst hier keine Daten von Klasse A zu Klasse B übertragen, sondern von Instanz von Klasse A zu Instanz von Klasse B. Ist dir der Unterschied klar? Wo im Code wird dieser Dialog erzeugt? Zitieren
Don_Pazo Geschrieben 12. Januar 2006 Autor Geschrieben 12. Januar 2006 Ist dir der Unterschied klar? Nicht so ganz. Die Beispiele, die ich gesehen habe, waren schwer . Das Dialogfenster wird in MainFrm.cpp erzeugt: // MainFrm.cpp void CMainFrame::OnFileAnalyse() { CAnalyse Dialog; Dialog.DoModal(); } Ist es das was du mains? Zitieren
Klotzkopp Geschrieben 12. Januar 2006 Geschrieben 12. Januar 2006 Nicht so ganz. Der Unterscheid zwischen Klasse und Instanz ist sehr wichtig für das Verständnis der objektorientierten Programmierung. Vielleicht solltest du nochmal das eine oder andere Tutorial antun. Ist es das was du mains?meinst - Ja. Der Dialog ist eine Autovariable, darum ist es heikel, die Adresse irgendwo zu speichern - du kannst dann kaum mehr sicherstellen, dass jemand einen Zeiger benutzt, nachdem es den Dialog gar nicht mehr gibt. Am besten wäre es, wenn sich der Dialog in OnInitDialog beim MainFrame "anmeldet" (also seinen this-Zeiger hinterlässt) und sich in OnOK und OnCancel wieder abmeldet. Dazu braucht der Mainframe natürlich einen Member-Zeiger, in dem er sich die Adresse des Dialogs merken kann. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.