CSplitterWnd mit 3 Fenstern in SDI



  • Hallo Leute,

    mal wieder eine Verständnisfrage,

    Ich möchte eine SDI Anwendung in 3 Fenster aufteilen.

    Es gibt einen Botton teil, das heisst er soll immer Unten am Rand über das ganze Fenster gehen. Hier soll ein art Live Ticker laufen, der Daten aus einem File anzeigt.
    Im Oberen Teil soll das Fenster wie im Explorer aufgeteilt werden. Im Linken Teil eine Baumstruktur, im Rechten Teil wird dann eine Seite angezeigt was man im Linken Teil aktiviert hat. Dialoge Views uns.

    Jetzt zu den Fragen :

    Als erstes muß ich einen Splitter erzeugen für Button und oben.
    Was für Classen muß ich da ableiten ?? für die ansichten.. ?

    Dann wenn ich das obere Fenter Teilen muß, muß ich den Splitter nicht in der MainFrame teilen sondern im oberen Teil ?? oder ??

    Wie müßen die abgeleiteten Classen für die 2 Oberen Hälften heißen ??
    Baumstruktur links, Ansichten rechts...

    Gruß und Danke
    andy_mann



  • Hallo kann mir keiner Helfen ??

    Möchte als Standart immer 3 Fenster zur Ansicht haben.

    Die ersten 2 Ansichten habe ich.
    Jetzt möchte ich den oberen Teil in 2 Fenster Teilen.

    BOOL CSplitterView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
    {
    	VERIFY(m_wndSplitter.CreateStatic(this, 1, 2));
    	VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CStringView),
    	                                CSize(100, 100), pContext));
    	VERIFY(m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CStringView),
    	                                CSize(100, 100), pContext));
    
    	return TRUE;
    }
    

    Wenn ich jetzt dies so aufrufe, kommt ein runtime Error.

    GRuß
    andy_mann



  • Hallo,

    habe es jetzt hinbekommen, dass ich 3 Fenster bekomme.

    Nur gibt es da ein Problem, beim beenden von diesem bringt er mir eine Fehlermeldung:

    Die Ausnahme "unknow software exception" (0x80000003) ist in der Anwendung an der Stelle 0x778a144b aufgetreten.

    So, ich rufe in der MainFrame in OnCreateClient den Splitter auf der eine Teil ein CView, der andere ein CSplitterView, abgeleitet von CFrameWnd.

    Wenn ich in der MainFrame den ertsen aufruf (CSplitterView) weg lasse, beendet das Programmm normal.

    Darf ich nicht von CFrameWnd ableiten ??

    Gruß
    andy_mann



  • Hhhmmmmmm.....

    kann es sein, dass bei einem Haltepunkt das Programm einen Fehler bringt ???

    Beim Kompilieren mit Release und ablauf des Programmes läuft es eigentlich durch und beendet auch korekt.....

    Gruß
    andy_mann



  • Hat denn gar keiner ne Idee ??

    Ich weis jetzt nicht ob ich diesen Fehler beachten muß oder nicht.
    Kann sonst nicht weiter machen ??

    Gruß
    andy_mann



  • Hallo Nochmals einen Hilferuf,

    ich bin mir überhaupt nicht sicher ob ich momentan auf dem Holzweg bin ??

    Tool Läuft auch nicht sauber...

    Gruß
    andy_mann



  • Das ständige Pushen deiner Beiträge bringt dir nix.
    Beschreib doch mal genauer wo jetzt dein Problem liegt,
    dann kann man dir evtl auch helfen.

    Devil



  • Mein Problem ligt daran, dass ich eine SDI anwendung habe.

    Unter der mainframe habe ich einen Splittter eingebaut, der mir das Fenster in 2 Teile Teilt, oben und unten.
    Noch funzt es wunderbar.
    Jetzt rufe ich im oberen Fenster einen weiteren Splitter auf und zwar bei mir das Objekt:

    class CSplitterView : public CFrameWnd
    
    BOOL CSplitterView::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    
    	VERIFY(m_wndSplitter.CreateStatic(this, 1, 2));
    	VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CNaviDialog),
    	                                CSize(150, 0), pContext));
    	VERIFY(m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CNormalView),
    	                                CSize(0, 0), pContext));
    	return TRUE;
    
    	// return CFrameWnd::OnCreateClient(lpcs, pContext);
    }
    

    Diesen Teile ich mit Links und rechts.
    Links Rufe ich dann eine Navigation (Dialog) auf. Im Rechten will ich dann verschiedene Abfragen aus der Datenbank realisieren.

    Soweit funzt das auch, keine Fehler und Läuft auch.

    Nur eim Beenden des Programmes Knallt es.
    Das Komische aber, nur wenn ich im Debugger Kompiliere. Unter dem Release läuft es Problemlos auch das Beenden.

    Jetzt bin ich mir nicht sicher, ob man das Fenster so teilen kann Abgeleitet con CFrameWnd im 2. Splitter ??

    Gruß
    andy_mann



  • Hm, ist der Destruktor der Klasse virutell ?
    Ist er public oder protected ?
    evtl. Liegts daran. Was sagt der debugger wenn du es
    debuggst (nach dem es geknallt hat) ?

    Devil



  • So sieht die Class aus:

    class CSplitterView : public CFrameWnd
    {
    	DECLARE_DYNCREATE(CSplitterView)
    protected:
    	CSplitterView();           // Dynamische Erstellung verwendet geschützten Konstruktor
    
    // Attribute
    protected:
    	CSplitterWnd m_wndSplitter;
    
    // Operationen
    public:
    
    // Überschreibungen
    	// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
    	//{{AFX_VIRTUAL(CSplitterView)
    	protected:
    	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
    	//}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    	virtual ~CSplitterView();
    
    	// Generierte Nachrichtenzuordnungsfunktionen
    	//{{AFX_MSG(CSplitterView)
    		// HINWEIS - Der Klassen-Assistent fügt hier Member-Funktionen ein und entfernt diese.
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    

    Beim Beenden steht der Zeiger auf irgend einer Speicheradresse und ein int wird angezeigt.

    Es müsste aber so gehen oder ??

    Gruß
    andy_mann



  • ICh habe es jetzt hin bekommen, dass die Fehlermeldung nicht mehr kommt.

    Bitte fragt mich aber nicht warum...

    Gruß
    andy_mann


Anmelden zum Antworten