CSplitterWnd und Zeiger auf die verschiedenen Views



  • Hallo ich habe ein Problem,

    ich habe mit dem Visual Studio 6 folgende Anwendung erstellt:
    SDI mit CSplitterWnd

    nun versuche ich mit einem ToolBar Button in die verschiedenen Views zu schreiben:
    Diesen Code habe in der der Doc-Klasse eingfügt.
    Code:

    // ToolBar Button "Stop"
    void CMCheckDoc::OnTbStop() 
    {
    	// TODO: Code für Befehlsbehandlungsroutine hier einfügen
    	testa();
    }
    
    //***********************************************************************************
    void CMCheckDoc::test()
    {
    	// Linkes Fenster
    	CMCheckView* pwndCheckView =(CMCheckView*)((CMainFrame*)(AfxGetMainWnd()->SetFocus()));	
    
    	pwndCheckView->SetActiveWindow();
    	pwndCheckView->GetListCtrl().InsertItem(1,"hallo");
    }
    
    void CMCheckDoc::testa()
    {
    	// Rechtes Fenster
    	CMCheckKonto* pwndCheckKonto =(CMCheckKonto*)((CMainFrame*)(AfxGetMainWnd()->SetFocus()));
    
    	pwndCheckKonto->SetActiveWindow();
    	pwndCheckKonto->GetListCtrl().InsertItem(1,"na geht doch");
    }
    //***********************************************************************************
    

    Ich versuche mit den Funktionen "test"(diese Funktion wird von einem anderen Button aufgerufen) und "testa" jeweils die Views als Aktive-Fenster zu schalten damit der Code in das jeweilige List Control geschrieben wird.
    Leider wird der Code immer nur in das Fenster geschrieben welches als letztes mit der Maus angeklickt wurde. Wie kann ich die Fenster mittels Zeiger aktivieren bzw umschalten damit das andere View als Aktives Fenster geschaltet wird?

    Ich hoffe ich habe mich verständlich ausgedrückt.
    Vielen Dank für eure Hilfe.

    Mfg Anlen



  • Was soll das denn bitte sein?

    Willst du den CWnd einer View des Splitters bekommen?

    Als 1. mal die View:

    CMCheckView* pView = (CMCheckView*)(((CMainFrame*)AfxGetMainWnd()))->GetActiveView());
    

    So in der legst du am besten mal nen Getter für dein Splitter Wnd an 😉 Den nennst du bsw. GetSplitterWnd ...

    CWnd* pMySplitterPart1Wnd = pView->GetSplitterWnd()->GetPane(0, 0);
    

    Referenzen:
    CSplitterWnd::GetPane


  • Mod

    Bleibt zudem die Frage warum Du in dieser Form die Views ermittelst. Du kannst die Views mit GetFirstViewPosition/GetNextView ganz einfach enumerieren.

    Der Typ der Views sollte übrigens Deinen Doc egal sein. Eine Abhängigkeit des Docs vom View würde ich vermeiden!



  • Danke ihr beiden,

    hab es mit eurer Hilfe hingekriegt.

    Mfg
    Anlen


Anmelden zum Antworten