Kleines aber hartnäckiges Splitterproblem !
-
Hi ich möchte in 2 Apps.(SDI) jeweils einen Splitter erstellen:
1.)----*-----*-----* ----*-----*-----* ----*-----*-----* *****-----*-----* ----*-----*-----* ----*-----*-----* ----*-----*-----*2.)
----------------- ----------------- ----------------- ***************** ----*-----*-----* ----*-----*-----* ----*-----*-----*1.)Das 1. senkrechte Pane ist nochmal durch einen horiz. Childsplitter geteilt.
2.)Das 2. horiz. Pane ist durch einen senkr. ChildSplitter geteilt.Ich kann zwar die Hauptsplitter erstellen aber wenn ich die Childsplitter erstellen möchte klappt nichts mehr und ich bekomme nur noch eine "Debug Assertion failed !"
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { CRect cr; GetClientRect(&cr); m_Splitter_Main.CreateStatic(this, 1, 3); // m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0)); // // m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, cr.Height()), pContext); // m_Splitter_Child_1.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Main.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width()/3, cr.Height()), pContext); m_Splitter_Main.CreateView(0, 1, RUNTIME_CLASS(CTest_01View), CSize(cr.Width()/3, cr.Height()), pContext); m_Splitter_Main.CreateView(0, 2, RUNTIME_CLASS(CTest_01View), CSize(cr.Width()/3, cr.Height()), pContext); return TRUE; }Wie gesagt sobald ich die Childsplitter einkommentiere krachts.
Naturlich hab ich m_Splitter_Main und m_Splitter_Child_1 in MainFrm.h deklariert !Könnt Ihr mir helfen, es ist zm verzweifeln !?

Vielen dank vorab
Shadoweater
-
Wo kommt der ASSERT? Das ist schon hilfreich zu wissen.
-
Hi Martin,
wenn ich kompiliere ist alles in Ordnung 0 Fehler, o Warnungen, erst wennich ausführe bricht die Sache zusammen !Gruß
Markus
-
Hi,
das hier klappt auch :
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { GetClientRect(m_rcRect); // Das Rect des kompletten Clients ermitteln m_iClientWidth = (m_rcRect.Width()); // Breite des Clients ermitteln m_Splitter_Main.CreateStatic(this, 1, 3); m_Splitter_Main.CreateView(0, 1, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Main.SetColumnInfo(0,int(m_iClientWidth/3.5),0); m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0)); m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 200), pContext); m_Splitter_Child_1.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Main.SetColumnInfo(1, int(m_iClientWidth/2.5),0); m_Splitter_Child_2.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 2)); m_Splitter_Child_2.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 200), pContext); m_Splitter_Child_2.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); return TRUE; }... nur nicht so wie ich es will, siehe Bilder 1. Beitrag !
Woran liegt das bloß

Gruß + danke für eure Mühe
ShadowEater
-
Die Asserts kommen meisten durch eine falsche row/ col anzahl zustande. Wie Martin schon sagte guck Dir die Stelle an, an der der ASSERT eintritt. Was mir aber noch auffällt ist, daß du m_Splitter_Main.CreateView(0, 0,..) erzeugst, obwohl Du diese View ja mit
m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0));'überschreibst'.
-
Hi connan,
ja aber wenn ich die Zeile auskommentiere bekomme ich auch einen Assent, wenn nicht klappts !Gruß
ShadowEater
-
ShadowEater schrieb:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { GetClientRect(m_rcRect); // Das Rect des kompletten Clients ermitteln m_iClientWidth = (m_rcRect.Width()); // Breite des Clients ermitteln m_Splitter_Main.CreateStatic(this, 1, 3); m_Splitter_Main.CreateView(0, 1, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Main.SetColumnInfo(0,int(m_iClientWidth/3.5),0); m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0)); m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 200), pContext); m_Splitter_Child_1.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Main.SetColumnInfo(1, int(m_iClientWidth/2.5),0); m_Splitter_Child_2.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 2)); m_Splitter_Child_2.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 200), pContext); m_Splitter_Child_2.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); return TRUE; }Was kommt denn raus? Das hier:
----*-----*-----* ----*-----*-----* ----*-----*-----* *****-----******* ----*-----*-----* ----*-----*-----* ----*-----*-----*?
-
ShadowEater schrieb:
Hi connan,
ja aber wenn ich die Zeile auskommentiere bekomme ich auch einen Assent, wenn nicht klappts !Kannst Du mal den Code posten wo der ASSERT auftritt?
-
Hi connan,
ja Deine Zeichnung stimmt, das kommt raus !
Ich bin einen Schritt weter, es werden jetzt 3 hotiz. Fenster agezeigt aber die ChildSplitter nicht, es kommt aber auch *KEIN* Fehler !!!
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { CRect cr; GetClientRect(&cr); m_Splitter_Main.CreateStatic(this, 3, 1); m_Splitter_Main.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Main.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Main.CreateView(2, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0)); m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(200, 0), pContext); m_Splitter_Child_1.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); return TRUE; }Vielen Dank für Deine Mühe
ShadowEater
-
ShadowEater schrieb:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { CRect cr; GetClientRect(&cr); m_Splitter_Main.CreateStatic(this, 3, 1); m_Splitter_Main.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Main.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Main.CreateView(2, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext); m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 2, 1, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0)); m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(200, 0), pContext); m_Splitter_Child_1.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); return TRUE; }Wundert mich, daß der das schluckt aber okay. Für das was du machen willst empfiehlt sich eine andere Variante:
m_Splitter_Main.CreateStatic(this, 2, 1); m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 1, 3, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(1, 0)); m_Splitter_Main.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Child_1.CreateView(0, 1, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext); m_Splitter_Child_1.CreateView(0, 2, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext);
-
Hi Connan,
vielen dank, das klappt, könntest Du die Zusammenhänge (rows/ cols) ein bisschen näher erläutern ?
Gruß
ShadowEater
-
Du hast es schon genau verstanden, zumindest schließe ich das aus Deinen Versuchen. Dir muß nur noch klar werden, daß wenn du einen ChildSplitter mit IdFromRowCol erzeugst, du im ParentSplitter nicht CreateView für diesen Bereich ausführen darfst. Ausschließlich das Child hat sich um die Erzeugung der neuen Views zu kümmern und das sind immer mindestens zwei!!. Aber mach Dir keine Sorgen manchmal kann man da wirklich verzweifeln

-
AAAAAAAAAAAAAHHHHHHHHHHHHHHHRRRRRRRGGGGGGGGGGGGHHHHHHHHHHHHHHHHH !!!!!!!!!!!!!
*D*A*N*K*E* CONNAN !!!!!!!!!!!!!!!!!!:D

ChildSplitter mit IdFromRowCol erzeugst, du im ParentSplitter nicht CreateView für diesen Bereich ausführen darfst.
Genau das wars !

DANKE CONNAN !

-
:cheers: