Probleme mit Beispiel
-
Hallo
Ich versuche gerade das Beispiel von [url] http://www.cpp-tutor.de/mfc/mfc/kap4/tut/tut5.htm [/url](void CMainFrame::SwitchView())
so abzuändern, dass ich statt eines CView Objekts ein CFormView erhalte.{ CView *pOldView; pOldView = GetActiveView(); CFormView *pNewView; if (m_pCFirstView == NULL) m_pCFirstView = pOldView; // Falls zweites View noch nicht erstellt if (m_pCSecondView == NULL) { CRuntimeClass *pCR = RUNTIME_CLASS(CPressePaketdatenEingabe); m_pCSecondView = static_cast<CFormView*>(pCR->CreateObject()); // ID des Views ungleich AFX_IDW_PANE_FIRST setzen! m_pCSecondView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault, this,AFX_IDW_PANE_FIRST+1,NULL); } } CView* m_pCFirstView; CFormView* m_pCSecondView;
Erhalte allerdings folgende Fehlermeldung beim Compilieren:
error C2248: "Create" : Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "CFormView" erfolgte
c:\programme\microsoft visual studio\vc98\mfc\include\afxext.h(756) : Siehe Deklaration von 'Create'Geht dies überhaupt oder was mache ich falsch?
Danke schon einmal im voraus für Eure Hilfe.MfG
Chris
-
Hmm, ich kann mir das nur so erklären, dass die 'm_pCSecondView'-Variable als protect angelegt ist. Solltest mal in private oder public ändern...
Gruß
:: NoName ::
-
Nein die beiden Variablen sind public. Aber wenn ich ich auf die Fehlermeldung klicke dann kommt folgendes
Auszug aus \vc98\mfc\include\afxext.h(756):
class CFormView : public CScrollView { .... protected: LPCTSTR m_lpszTemplateName; CCreateContext* m_pCreateContext; HWND m_hWndFocus; // last window to have focus virtual void OnDraw(CDC* pDC); // default does nothing // special case override of child window creation virtual BOOL Create(LPCTSTR, LPCTSTR, DWORD, const RECT&, CWnd*, UINT, CCreateContext*); virtual BOOL PreTranslateMessage(MSG* pMsg); virtual void OnActivateView(BOOL, CView*, CView*); virtual void OnActivateFrame(UINT, CFrameWnd*); BOOL SaveFocusControl(); // updates m_hWndFocus ..... }
-
vielleicht sollte ich noch ergänzen:
Das ganze ist ein SDI mit CView als Basisklasse für die Ansicht. Ich möchte nun aber eine zweite Ansicht als CFormView hinzufügen. Hierbei erhalte ich oben genannte Fehlermeldung.
MfG
Chris
-
Mach mal in dem Header deines View (der vom FormView abgeleitete):
public: using CFormView::Create;
Die Create Methode ist nämlich nicht public. Was deine Variablen sind ist eigentlich an der Stelle egal.
Ob das aber weitere Komplikationen nach sich zieht weiß ich nicht.
Test the East.
-
Das mit dem
public: using CFormView::Create;
hat nix gebracht. Es erscheint immer noch die gleiche Fehlermeldung.
MfG
Chris
-
Ich habe diese Funktion in meinem Basisview, vielleicht hilft die.
public: virtual void CreateWnd(CWnd* f_pParent, CCreateContext& f_rCreateContext);
void CBasisView::CreateWnd(CWnd* f_pParent, CCreateContext& f_rCreateContext) { VERIFY(Create(0, 0, WS_CHILD | WS_BORDER, CRect(0, 0, 0, 0), f_pParent, AFX_IDW_PANE_FIRST, &f_rCreateContext)); SendMessage(WM_INITIALUPDATE, 0, 0); }
Wie man das aufruft und so kannst du auch in der FAQ nachlesen. Vielleicht hilft es ja.