Feststellen ob der View aktiv ist oder nicht



  • Hi!

    Ich habe zwei CViews. Zwischen diesen wechsle ich per CTabCtrl. Doch nun möchte ich wissen ob View1 aktiv oder nicht aktiv ist und sobald er inaktiv ist soll er den Text in dem View als datei speichern. Dieser soll dann beim umschalten auf den zweiten View geladen werden.

    Wie heißt der Befehl, um fest zu stellen ob ein View noch active ist?

    Thx



  • Hi,

    die Klasse CFrameWnd stellt hierfür die Methode GetActiveView zur Verfügung.

    MfG.



  • aber wie stell ich das an das der Text in CView1 gespeichert wird? Das geht doch dann über CMainframe oder?



  • Sind die beiden Views vom gleichen Typ ?
    Sind sie an dasselbe Dokument gebunden ?



  • ja sind an das selbe CDocument gebunden...wieso fragst du?



  • normalerweise werden bei der MDI/SDI Architektur die Daten im Dokument vorgehalten.

    Der View dient damit zur Eingabe/Darstellung der Daten und reicht diese an
    das Dokument weiter/holt sie sich aus dem Dokument.

    Die Views werden ja vermutlich beim Umschalten sichtbar/unsichtbar gemacht...
    nun musst Du eigentlich nur noch feststellen, ob der View gerade sichtbar oder
    unsichtbar wird(OnShowWindow) und ob es sich um View1 oder View2 handelt.

    Letzteres kannst Du rausfinden, indem Du über das Document die Views enumerierst
    (GetFirstViewPosition/GetNextView) und (innerhalb der Viewklasse) mit 'this'
    vergleichst.

    MfG.



  • ...
    wow

    ...
    das ist echt heftig...*am kopf kratz*
    wie soll das dann aussehen?! und was ist enumerieren?! 😕



  • Hi,

    um rauszufinden, ob es sich um View1 oder View2 handelt, fügst Du Deiner View-Klasse
    eine Funktion wie die folgende hinzu

    int CMyView::GetViewIndex()
    {
    	CMyDocument *p_doc=GetDocument();
    	POSITION pos=p_doc->GetFirstViewPosition();
    	int idx=-1;
    	CView *p_view=0;
    	while(pos!=0)
    	{
    		idx++;
    		p_view=p_doc->GetNextView(pos);
    		if(p_view==this)
    			break;
    	}	
    	return idx;
    }
    

    Dem Dokument würdest Du zum Speichern des Textes eine Membervariable vom
    Typ CString hinzufügen (public).

    Zum Speichern bzw. Laden des Textes vom View zum Dokument und umgekehrt
    könntest Du dem View eine weitere Funktion hinzufügen:

    void CMyView::UpdateData(bool store)
    {
    	CMyDocument *p_doc=GetDocument();
    
    	if(store)
    	{
    		// Daten aus dem View in die CString Variable im Dokument
    	}
    	else
    	{
    		// Daten aus der CString Variable im Dokument in den View holen
    	}
    
    }
    

    Nun musst Du in der OnShowWindow-Methode Deines Views nur noch entsprechend
    auf sichtbar/unsichtbar werden reagieren:

    void CMyView::OnShowWindow(BOOL bShow, UINT nStatus )
    {
    	int idx=GetViewIndex();
    	if(idx==0 && !bShow)
    		UpdateData(true);
    	else
    		if(idx==1 && bShow)
    			UpdateData(false);
    }
    

    Hoffe, es ist jetzt etwas klarer.

    MfG.



  • oh vielen vielen dank!!!!


Anmelden zum Antworten