CView ruft Funktion in CDialog

Don_Pazo

Erfahrenes Mitglied
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:

Code:
   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:

Code:
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 ?
 
Hallo,

das Dialogfenster muss nichtmodal sein und wenn CAnalyse::FortschritanzeigeSetzen() als public deklariert ist, kannst du von deinem View aus diese Methode aufrufen.

Gruß
MCoder
 
In meinem Programm soll unbedigt das Dialogfenster modal sein
Mit deine Beispiel funktioniert solange man das Dialogfenster nicht endert sonst gibt Felermeldung

Code:
/* CE_LearnView.cpp */

CE_LearnView::funk(){
  .....
    int Position = 80
   CAnalyse::FortschritanzeigeSetzen(Position);
}
Code:
 /* CAnalyse.cpp*/

CAnalyse::FortschritanzeigeSetzen(int Position){

  MessageBox("Es funktioniert noch");              // FUNKTIONIERT
 
   m_cFortschrittsanzeige.SetPos(Position );     // FELERMELDUNG
}

Weist du warum das so ist
 
Hallo,

ein modales Dialogfenster ist deshalb problematisch, weil der aufrufende Programmteil bei DoModal() blockiert wird und erst nach Schließen des Dialogs weiterläuft.
Falls die Aktualisierung der Fortschrittsanzeige über irgendwelche Events im View gesteuert wird, könnte es aber vielleicht auch mit einem modalen Dialog gehen.

Wenn das Dialogfenster beendet wurde ist es natürlich logisch, das die Aktuialisierungsfunktion crasht, das dass betreffende Control ja nicht mehr existiert. Hier sollte die Existenz des Dialog-Fensters geprüft werden:
Code:
if( ::IsWindow(GetSafeHwnd()) )
{
    m_cFortschrittsanzeige.SetPos(Position );
}

Gruß
MCoder
 
Zurück