SplitterWindow



  • Ich habe in Meiner CreateClient Funktion 4 SplitterWindows erzeugt:

    if(!m_wndSplitter.CreateStatic(this,2,2))
        return false;
    if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSplitterRichView),CSize(200,100),pContext)
    ||
    !m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CSplitterRichView),CSize(100,100),pContext)
    ||
    !m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSplitterRichView),CSize(200,100),pContext)
    ||
    !m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(CSplitterRichView),CSize(100,100),pContext))
    {
     m_wndSplitter.DestroyWindow();
     return false;
    }
    return true;
    

    Wie ich sehe, benutze ich immer die selbe Klasse.
    Nun will ich das wenn ich einen Text in eines der splitterWindows eingebe odre reinlade das alle anderen auch den Text bekommen den ich lade oder schreibe. Jemand ne Idee?



  • Hi!
    Falls Serialize nimmer fuzt: Hol dir einfach auf die einzelnen Views Zugriff und setz es händisch

    mfg *mike* 😃



  • Seriklize funzt scho, aber es giebt den text nu im ersten Splitterwindow aus, die anderen drei bleiben unberührt. Ich will ja auch, das wenn ich z.B. in SplitterWindow 3 (unten rechts) etwas eingebe das alle anderen übrigen drei Splitterwindows das was ich eingebenen habe auch bekommen?????
    ????????????

    Und wie meinst das mti dem Handel??? Kannst mal beispiel zeigen?



  • Das ist nicht so einfach, weil RichEdits den Textspeicher intern verwalten. In Deiner Dokument-Klasse mußt Du ein Stream-Objekt anlegen. Immer, wenn sich eines der Controls geändert hat, müssen die Daten in dieses Objekt serialisiert werden und dann mit CDocument->UpdateAllViews den anderen Dokumenten der neue Stream übergeben werden.

    Ne andere Möglichkeit sehe ich nicht, auf den Buffer zuzugreifen!



  • Hi!
    Füg einfach in eine Funktion in CMainFrame ein. Z.B. GetView(int ...,int ...) um auf Zeile und Spalte zugreifen zu können. Dann kannst du mit m_wndSplitter.GetPane(...,...); auf die einzelnen Views zugreifen. Du kannst dann von überall auf den View zugreifen:
    CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
    pMain->GetView(1,2)...
    Dann solltest du mit SetWindowText normalerweise keine Probleme mehr haben.

    mfg *mike* 😃



  • Sorry aber es funzt trotzdem noch net, zumindestens was ich nach mike seiner methode versucht habe. ReneG habe net so ganz verstanden wat ich da machen soll ?????

    Sorry



  • Hi!

    CMyView* CMainFrame::GetMyView()
    {
       CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
    
       CMyView* pView = NULL;
    
       if(pWnd)
        pView = (CMyView*)pWnd;
    
       return pView;
    }
    

    Aufruf:

    CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
    ASSERT(pFrame != NULL);
    CMyView* pView = pFrame->GetMyView();
    ASSERT(pView != NULL);
    
    pFrame->GetMyView()->OnDoSomething(); //z.B. SetWinodwText("Test");
    

    So sollte es funktionieren 😉

    mfg *mike* 😃



  • Also Mike, ich muss wieder mal sagen das ich erstaunt bin wie wenig ich weis 😢

    Danke wieder mal, und da du schon im Info Bar meines Progs stehst, werde ich dir wohl meinen Erstgeborenen geben müssen 😉 Vielen Dank nochmal 😉


Log in to reply