Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » mdi: neue view einbinden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.10.2002, 10:52 Uhr
~christian
Gast


hallo zusammen,

vorinfo: ich habe eine mdi anwendung (CEditView) und entwickle unter windows2000 mit dem ms-vc++6.0 + VisualAssist-plugin v4.1.3.1233.

standardmäßig werden bei mir in meiner mdi-anwendung unter "Datei -> Neu" CEditView's erstellt. nun möchte ich bei einem anderen menüeintrag (bspw. "Bericht") eine html-seite in einer view anzeigen lassen. hier habe ich probleme beim einbinden bzw. aufrufen dieser neuen klasse.

ich habe mir eine klasse CBrowser angelegt. das habe ich mit dem assistenten gemacht und dabei die klasse von chtmlview abgeleitet.

danach habe ich in meiner App-klasse meine cbrowser-klasse durch

C++:
    CMultiDocTemplate* pDocTemplate;

    pDocTemplate = new CMultiDocTemplate(
        IDR_BROWSER,
        RUNTIME_CLASS(CMyAppDoc),
        RUNTIME_CLASS(CChildFrame),
        RUNTIME_CLASS(CBrowser));
    AddDocTemplate(pDocTemplate);


bekannt gemacht (glaube ich ..).

Nun weis ich schon nicht mehr richtig weiter. wie kann ich denn jetzt beim menüklick "Datei -> Bericht" eine view der CBrowser klasse anzeigen lassen?

ich habe mir schon mit dem assi. eine funktion hinter den menüeintrag "Bericht" gelegt, leider bin ich noch nicht dahinter gekommen wie ich eben meine chtmlview klasse aufrufe, so das auch was angezeigt wird. mit dem konstruktor alleine gehts irgendwie nicht

ich wäre euch für hilfen bzw. tipps oder links o.ä. zu themen die damit zutun haben sehr dankbar.

MfG,
christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.10.2002, 11:08 Uhr
Christian
C/C++ Master
(Operator)


Hallo!

Ich habe nun einmal fogendes in meine InitInstance() geschrieben:


C++:
CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
        IDR_MDITYPE,
        RUNTIME_CLASS(CMdiDoc),
        RUNTIME_CLASS(CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
        RUNTIME_CLASS(CMdiView));
    AddDocTemplate(pDocTemplate);

        
    CMultiDocTemplate* pDocTemplate2;
    pDocTemplate2 = new CMultiDocTemplate(
        IDR_MDITYPE,
        RUNTIME_CLASS(CMdiDoc),
        RUNTIME_CLASS(CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
        RUNTIME_CLASS(CBrowser));
    AddDocTemplate(pDocTemplate2);



Wenn du das dann nun testest sieht man, dass das Anwendungsgerüst ein Dialogfeld erstellt, aus welchem du nun auswählen kannst, welches Dokument erstellt werden soll wenn du auf Datei Neu klickst.

Infos aus der MSDN:

C++:
ID_FILE_NEW:   Creates a new/empty document.
Note   You must connect this to your CWinApp-derived class's message map to enable this functionality.

CWinApp::OnFileNew implements this command differently depending on the number of document templates in the application. If there is only one CDocTemplate, CWinApp::OnFileNew will create a new document of that type, as well as the proper frame and view class.

If there is more than one CDocTemplate, CWinApp::OnFileNew will prompt the user with a dialog (AFX_IDD_NEWTYPEDLG) letting them select which document type to use. The selected CDocTemplate is used to create the document.

One common customization of ID_FILE_NEW is to provide a different and more graphical choice of document types. In this case you can implement your own CMyApp::OnFileNew and place it in your message map instead of CWinApp::OnFileNew. There is no need to call the base class implementation.

Another common customization of ID_FILE_NEW is to provide a separate command for creating a document of each type. In this case you should define new command IDs, for example ID_FILE_NEW_CHART and ID_FILE_NEW_SHEET.




Du kommst zu dem Artikel, wenn du im Index nach OnFileNew suchst und dann den Link zu Technical Note 22 wählst.

Grüße Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.10.2002, 11:26 Uhr
~christian
Gast


hallo christian,

danke für deine schnelle hilfe!
das ist schonmal super da war ich ja knapp dran ...

leider ist dieser "neu" dialog jedesmal wenn ich auf "Datei -> Neu" gehe nicht das was ich eigentlich wollte, aber es geht in die richtung.
es soll wenn jemand auf "Datei -> Neu" klickt stadardmäßig ein CEditView leeres dokument erstellt werden (ohne diesen auswahldialog).

lediglich wenn ich im menü auf "Datei -> Bericht" klicke, soll eine CHtmlView erstellt/angezeigt werden -> ohne diesen auswahl-dialog.

weist du wie ich meine?
gibt es da eine möglichkeit um den dialog herum zu kommen und direkt das doctemplate aufzurufen, bzw. auszuführen?

danke für deine mühe!
MfG,
christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.10.2002, 11:51 Uhr
Programmer



Goil!!!

2 mal CHRISTIAN!!!
1mal UNREGISTERED
und 1mal REGISTERED!!! Cooool
--
Moderator werden? Null Problemo!! Werden gesucht auf:
http://4116.rapidforum.com

Visti www.it-center.ch.tf
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.10.2002, 11:59 Uhr
Christian
C/C++ Master
(Operator)


Hi Chris!

Du musst dir dazu zunächst ersteinmal genau überlegen was du haben willst. Wenn du eine Dokumentvorlage neu erstellst bedeutet dies, dass du einen Verbund aus Dokumentklasse, Ansicht,... erstellst, von dem du mehrere Instanzen verwenden kannst. Ich habe vor kurzem ein Projekt gehabt, wo ich nur ein MDI Dokument hatte, welche miteinander verglichen werden konnten. Das Vergleichsprotokoll wurde dann von meiner Anwendung als HTML Datei erstellt und sollte im Programm angezeigt werden. Da in diesem Fall die HTML Ansicht nur einmal gebraucht wurde und nicht im Zusammenhang mit einem Dokument verwendet wird habe ich dazu keine Dokumentklasse registriert und habe das Fenster "per Hand" erstellt.

Je nach dem was du brauchst kann ich dir einmal ein kleines Beispiel zusammenstellen.

Beschreib doch einmal genauer was du brauchst.

Grüße
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.10.2002, 12:22 Uhr
~christian
Gast


hallo christian,

erstmal vielen dank für deine mühe

also.. ich habe in meinem programm verschiedene simulationsroutinen die je nach eingabe der testdaten verschiedene werte ausspucken. das funktioniert alles wunderbar. aus den verschiedenen werten generiere ich mir eine html-datei mit tabellen, vergleichen, ranglisten, grafiken, etc..

dh.:
sobald die testdaten des users simuliert wurden, springt der iexplorer auf und zeigt den aktuellen bericht mit den ganzen ergebnissen der simulation an.

jetzt möchte ich (rein aus anwenderfreundlichen gründen) diesen html-bericht innerhalb meines programmes anzeigen. sozusagen in einem view der mdi.
dazu habe ich wie schon gesagt eine klasse erstellt und von chtmlview abgeleitet.

ich dachte ich könnte einfach sobald der bericht fertig generiert wurde meine cbrowser klasse aufrufen, die als startseite den bericht anzeigt.


da ich diese html-ansicht wie du nur einmal benötige, lohnt es sich nicht eine eigene dokumentenvorlage neu zu erstellen. ich müsste also so wie du sagtest dieses html-fenster selber "bauen".

wie hast du das denn gemacht wenn ich fragen darf?


vielen dank und schöne grüße,
christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.10.2002, 17:45 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Das ist eigentlich halb so schwer. :-)
Ich habe einmal eine Klasse namens CHTMLFrame (abgeleitet von CMainFrame) und CHTMLAnsicht (abgeleitet von CHTMLView). Zu Beginn meiner Anwendung erstelle ich die Fenster: (in InitInstance)


C++:
CRuntimeClass *rcFrame = RUNTIME_CLASS(CHTMLFrame);
    CRuntimeClass *rcAnsicht = RUNTIME_CLASS(CHTMLAnsicht);

    m_pHTMLFrame = (CHTMLFrame*) rcFrame->CreateObject();
    m_pHTMLAnsicht = (CHTMLAnsicht*) rcAnsicht->CreateObject();

    RECT r;
    r.left = 10;
    r.top = 10;
    r.bottom = 200;
    r.right = 300;
    m_pHTMLFrame->CreateEx(WS_EX_TOOLWINDOW | WS_EX_DLGMODALFRAME, NULL, "Vergleiche: ", WS_BORDER | WS_SYSMENU | WS_THICKFRAME, r, NULL, NULL);
    m_pHTMLAnsicht->Create(NULL, "Meins", WS_CHILD | WS_VISIBLE, CRect(0, 0, 500, 500), m_pHTMLFrame, 200);

    m_pHTMLFrame->SetActiveView(m_pHTMLAnsicht);



Du kannst ja bei Bedarf dann einfach das Fenster visible schalten. Mit Navigate2(..) kannst du dann zu deiner Seite navigieren.

Gib bitte bescheid, ob du damit klar kommst und ob das dein Problem gelöst hat.

Grüße
Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.10.2002, 08:26 Uhr
~christian
Gast


guten morgen christian,

sorry das ich mich jetzt erst melde, habe leider kein internet zuhause ..
zu deiner lösung.

ich habe die beiden klassen so erstellt und den code in die initinstance geschrieben. leider kommen beim kompilieren folgende fehlermeldungen

C++:
// Fehlermeldungen:
error: 'classCHTMLFrame' : is not a Member of CHTMLFrame
(HTMLFrame.h) see declaration of CHTMLFrame
error: 'classCHTMLFrame' : undeclared identifier

// in Zeile:
CRuntimeClass *rcFrame = RUNTIME_CLASS(CHTMLFrame);


die klasse CHTMLFrame habe ich wie du sagtest von CMainFrame abgeleitet (public). ich habe HTMLFrame.h und HTMLAnsicht.h per #include mit eingebunden.
weist du vielleicht woran es sonst noch liegen könnte? ich kann da nichts sehen ..

vielen dank und grüße,
christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.10.2002, 21:43 Uhr
Christian
C/C++ Master
(Operator)


Hm,
das kann ich so jetzt auch nicht sagen.
Schickst du mir den Code? (chris@postmusic.de)

Grüße
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.10.2002, 10:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ähm hast du vielleicht classCHTMLFrame geschrieben? nicht class CHTMLFrame? Nur dann bringt er bei mir so einen Fehler ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: