Rahmenloses Dialogfesnter in CChildView einer SDI einbetten?


  • Mod

    Für dieses Anwendung solltest Du einfach CFormView verwenden.

    Wenn Dein Programm abstürzt sag uns wo und wie der Callstack aussieht.



  • ok, bin grad nich zuhause..

    was ist denn ein CFormView? noch nie gehört? Ist es ganu das was ich will, quasie eine Fenster das ich schön per drag-n-drop mit controll designen kann und später als CWnd objekt in ein ParenFenster einbetten kann?



  • So...

    - Ok, hab eine SDI anwendung (ohne doc/view als Mit einem ChildView) erstellt.

    - Habe dann in den Ressorucen "Neue Ressooruce -> Dialog- >FormView" erstellt, eine klasse dazu erzeuget CMyView, abgeleitet von CFormView.

    - Dann hab ich das ChildView Member mit meinem CFormView Member ersetzt.

    und in CMainFrame OnCreate eingebaut:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    		return -1;
    	// Ansicht erstellen, um den Clientbereich des Rahmens zu belegen
    
    	if (!m_formView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)){
    		TRACE0("Failed to create view window\n");
    		return -1;
    	}
    
    	//if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
    	//	CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    	//{
    	//	TRACE0("Ansichtsfenster konnte nicht erstellt werden\n");
    	//	return -1;
    	//}
    
    	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    	{
    		TRACE0("Symbolleiste konnte nicht erstellt werden\n");
    		return -1;      // Fehler bei Erstellung
    	}
    

    FEhler:

    d:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(50): error C2248: 'CFormView::Create' : cannot access protected member declared in class 'CFormView'd:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(40): error C2248: 'CMyView::~CMyView' : cannot access protected member declared in class 'CMyView'd:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(35): error C2248: 'CMyView::CMyView' : cannot access protected member declared in class 'CMyView'
    

    Hier meine CMyView Klasse (header):

    // CMyView form view
    
    class CMyView : public CFormView
    {
    	DECLARE_DYNCREATE(CMyView)
    //public:
    protected:
    	CMyView();           // protected constructor used by dynamic creation
    	virtual ~CMyView();
    
    public:
    	enum { IDD = IDD_FORMVIEW };
    #ifdef _DEBUG
    	virtual void AssertValid() const;
    	virtual void Dump(CDumpContext& dc) const;
    #endif
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    	DECLARE_MESSAGE_MAP()
    };
    

  • Mod

    Richtig!
    Ein CView lebt immer nur in enem CFrameWnd und nicht in einem View wiederum. Für die Erzeugung von Views ist das Framework mit den Doc Templates zuständigund nicht Du! 😉

    Du hast eine SDI Applikation ohne Doc/View erzeugt und versuchst diese nun auf Doc/View umzubiegen. Das geht so nicht.
    Erzeuge mal ene neue SDI Applikation mit Doc/View!



  • Achso, CFormView ist verwand mit CView:) wenn ich dann aber das Cview mit dmeiner CformView objekt ersetze , dann werden die fehler ja immer noch da sein. hast du diese mal gelesen?

    d:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(50): error C2248: 'CFormView::Create' : cannot access protected member declared in class 'CFormView'd:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(40): error C2248: 'CMyView::~CMyView' : cannot access protected member declared in class 'CMyView'd:\Projekte\WinCC_TagReduce\ANSI C Debug\SDIApp\MainFrm.cpp(35): error C2248: 'CMyView::CMyView' : cannot access protected member declared in class 'CMyView'

    Das Doc und View trennen ja die programmlogik und die ansicht? View ist ja bei mir ein "fenster" aber eigentlich wird das view ja zum drucken und so verwendet?



  • *Gelöscht* Martin war mal wieder schneller.....



  • Ich bekomms net hin..

    ich hab ne CFormView klasse welche ich durch die reguläre CView klasse ersetze.. auch bei dem DocTemplate ersteze ich das alte View...

    Programm startet, aber es wird nichts angezeigt.. OnDraw meine FromViews wird nich aufgerufen OnCreate(), OnInitialUpdate() werden augerufen. Muss ich irgendwo noch sagen das er das fenster zeichnen soll?

    dieser code in CMainFrame:

    if (!m_oTEST.CreateEx(NULL, NULL,NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)){
    		TRACE0("Failed to create view window\n");
    		return -1;
    	}
    

    hab ich weg gelassen, weil dies ja automatisch durch das DocTemplate aufgerufen wird.. aber er zeigt mir kein fenster an 😞


  • Mod

    Leg doch bitte einfach mal ein Neues SDI Projekt an, weie ich es geschrieben habe.

    Ein CFormView ohne Doc/View geht eben nicht!



  • hab ich doch martin... ich sag ja das ich das autmaitsch generierte CView Obhejt der SDI Doc/View awendung mit meiner CFormView Klasse ausgetauscht habe.. es gibt keinen absturz und nichts.. es wird eben nich angezeigt...


  • Mod

    Nein! Hast Du nicht und auf dem Level brauchen wir nicht weiter zu diskutieren!

    Wenn es eine SDI Applikation mit CFormView wäre, dann gäbe es keinen Create Code für den CView in CMainFrame::OnCreate!


Anmelden zum Antworten