SDI zwischen Views wechseln



  • Hallo Leute

    Ich möchte in meinem SDI-Projekt zwischen Views wechseln.
    Dazu wurde schon in den FAQ's geschrieben . Jedoch gilt das
    nur für Views (Formviews) mit einer ID.
    Wie mache ich das denn zB bei einem EditView? Dort habe ich
    keine ID . Hat jemand eine Ahnung?

    Danke und GRuß
    Linus


  • Mod



  • Danke für die Antwort

    Habe das mal durchgearbeitet.
    Dabei sind jedoch 2 Probleme aufgetaucht:

    1. Wenn ich eine neue Ansicht erstelle CNewView dann
      kommt die Fehlermeldung bei
    m_pNewView = (CView*) new CNewView;
    

    1>c:\users\hauke\documents\visual studio 2005\projects\sdiswitch\sdiswitch\sdiswitch.cpp(106) : error C2259: 'CNewView': Instanz von abstrakter Klasse kann nicht erstellt werden
    1> aufgrund folgender Member:
    1> "void CView::OnDraw(CDC *)": ist abstrakt
    1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(3909): Siehe Deklaration von 'CView::OnDraw'

    1. in SwitchView ist die Konstante GWW_ID unbekannt

    Gruß Linus



  • linus schrieb:

    Jedoch gilt das
    nur für Views (Formviews) mit einer ID.
    Wie mache ich das denn zB bei einem EditView? Dort habe ich
    keine ID . Hat jemand eine Ahnung?

    Also, ich verwende da die IDs der Commands im Menü, nicht die der Ressourcen.
    Also sollte das eigentlich auch mit Editviews gehen. 🙂

    Der interessante Teil ist ja der switch wo je nach ID was anderes geladen wird.
    Und der hat nix mit den Ressourcen zu tun. 😉


  • Mod

    1. Deine Klasse hat keine OnDraw Funktion, dass sagt die Fehlemreldung. Eine Instanz diser Klasse kann also nicht angelegt werden.

    2. Verstehe ich nicht. Das Projekt compiliert nicht alleine?
    Kann nicht sein!



  • Also, ich verwende da die IDs der Commands im Menü, nicht die der Ressourcen. Also sollte das eigentlich auch mit Editviews gehen. 🙂

    Sorry, das verstehe ich nicht. 😞
    Mein SDI Projekt hatte bisher nur Formviews.
    Und mit dem Wizard hatte ich das Projekt zuerst als View ein CView gewählt.
    Jetzt habe ich zwei neue Klasen erstellt: CNewEditView (CEditView) und
    CNewEditDoc (CDocument) Was meinst Du jetzt mit "IDs der Commands im Menü" ?
    Ich seh es einfach nicht ???
    😕

    Gruß Linus


  • Mod

    Und von was ist CNewView abgeleitet?
    Sowohl ein CFormView noch ein CEditView haben eine OnDraw Funktion, diese könnten diesen Fehler nicht auslösen.



  • linus schrieb:

    Was meinst Du jetzt mit "IDs der Commands im Menü" ?
    Ich seh es einfach nicht ???
    😕

    Gruß Linus

    Um den View zu wechseln hast du doch sicher einen Menübefehl wo du draufklickst. Und der hat eine ID.
    Datei-Neu hat z.B. ID_FILE_NEW (das ist eine Standard-ID, deine eigenen kann ich leider nicht raten.)



  • Hallo

    SOrry , ich war ne lange Zeit "out of order" 😞
    Kann mich jetzt wieder meinem Problem widmen.

    Estartu schrieb:

    Um den View zu wechseln hast du doch sicher einen Menübefehl wo du draufklickst. Und der hat eine ID.
    Datei-Neu hat z.B. ID_FILE_NEW (das ist eine Standard-ID, deine eigenen kann ich leider nicht raten.)

    Das habe ich verstanden 💡 und auch gemacht . Jedoch bekomme ich jetzt die
    Fehlermeldung :
    error C2039: 'CreateWnd': Ist kein Element von 'CNewEditView'
    Das kann ich jedoch nicht glauben ???

    Danke für Eure Geduld
    Gruß Linus


  • Mod

    Wieso kannst Du das nicht glauben, wenn Dir der Compiler dsas sagt. Ich würde es. Die Funkltion heißt nämlich entweder einfac Create, oder CreateWindow, oder CreateWindowEx.

    Bevor Du anfängst zu Zweifeln (und zu posten über Deinen Zweifel) würde ich einfach die Doku lesen.



  • Ich hatte in der Doku nachgeschaut .
    Dort fand ich dass CFormView von CSrollView und das von CView abgeleitet wurde
    Desgleichen bei CEditView von CCtrlView und das wiederum von CView.

    Da aber in CFormView und CScrollView keine Funktion CreateWnd zu finden war,
    dachte ich sie wäre von CView vererbt. Das schein abernicht zu stimmen,
    vielleicht sind meine Unterlagen sind zu alt
    ( 😮 Ich benutze immer The Official Reference for Microsoft Visual C++ 6.0)


  • Mod

    Da hat sich nichts geändert. Es gab noch nie eine Funktion CreateWnd. Die heißen Create oder CreateWindow.



  • Martin Richter schrieb:

    Da hat sich nichts geändert. Es gab noch nie eine Funktion CreateWnd. Die heißen Create oder CreateWindow.

    Jein. Was die MFC angeht hast du Recht. Allerdings nutzt er das zum Umschalten, was ich in der FAQ geschrieben habe und DA gibt es diese Funktion im View. Man muss sie selbst anlegen. ⚠


  • Mod

    Und warum nimmt er nicht die detailierte Erklärung in der MFC, die ich ja auch schon gepostet habe?
    http://msdn2.microsoft.com/en-us/library/s199bks0(VS.80).aspx


Anmelden zum Antworten