Einbinden einer Form ohne Doc/View
-
Ich steh auf dem Schlauch, ich möchte eine mit VC6 erstellte Form in mein Rahmenfenster einbinden. Beim Doc/View Modell war dies ganz einfach, ohne dem weiß ich nicht wo zu beginnen.
Beim Frame oder in InitInstance bei der App?
Ein Suchen im Forum und Googeln hat mich auch nicht weiter gebracht, entweder ist dies kein Problem für andere oder...ich stelle die falschen Fragen.
-
Da vielleicht niemand eine Idee hat was ich meine, hier einige Erweiterungen der Frage:
Beim Aufbau des Rahmenfensters wird auch das View erstellt:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // create a view to occupy the client area of the frame if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
Meine Form soll sich genau wie die View in das Rahmenfenster einbinden. Die Größe der Form stelle ich in meiner Form-Klasse CKontakt ein, wie ist mir bekannt.
Wenn ich die Form hier mit einem Create erstellen will, erhalte ich aber die Fehlermeldung, kein Zugriff auf protected Element dessen Deklaration in CFormView erfolgte, Konstruktor meiner Klasse ist auf public gesetzt, also ist mein Denkansatz oder mein Aufruf wohl falsch.CKontakt* pForm = new CKontakt; pForm->Create(NULL,NULL,WS_CHILD,CRect(0,0,0,0),m_pMainWindow,IDD_KONTAKT_FORM,NULL); pForm->ShowWindow(SW_SHOW);
-
Und warum willst Du das ohne Doc/Viewmachen, wenn es damit doch so einfach war?
-
.... weil ich immer wieder gerne hinzulerne. Es muss ja gehen, nicht alle arbeiten mit Doc/View.
Wenn ich dies nicht verstehe, dann fehlt mir doch etwas?
Mich verwundert, dass dies in keinem (kenne aber nur 3) Visual C++ Buch erwähnt wird. Also, eine Idee??
-
Du erzeugst enfach in dem Frame ein CDialog Objekt als Child des Frame Windows.
Dann musst Du enen OnSize Handler im Frame einbauen, der Dir dann das Child an die Parent Größe anpass.
Allerdings hast Du dann kein Scrolling. Denn ein CDilog ist nicht scrollable wie ein CFormView.