Unter MFC ein neues Fenster erzeugen und anzeigen. Wie?



  • Hallo an alle!
    Folgendes. Ich habe ein Projekt als SDI realisiert. Nach langem hin und her und ausprobieren. Habe bewusst keine MDI-Aplikation gewählt.
    Funzt alles wunderbar, bis auf die Zusammenfassung. Die Daten werden innerhalb der Dokument/Ansicht Struktur verwaltet. Jetzt versuche ich schon stunden/tagelang ein neues Fenster zu erzeugen worin die Daten von der CDokument-Klasse zusammengefasst und ausdruckbar sind.
    Vorweg. ich habe es bis jetzt nur geschafft, indem ich ein neues Projekt angelegt habe und mit dem ShellExecut-Kommando dieses Fenster geöffnet habe. Das ist aber sehr umständlich.
    Deshalb veruche ich schon seit Tagen unter MFC ein Fenster zu erstellen und anzuzeigen. Bis jetzt ohne nennenswerten Erfolg.
    Ich habe es zwar geschafft eine von CWnd abgeleitete Klasse zu erzeugen und anzuzeigen, aber das ist auch nicht ideal. Erstens fehlt die CScrollBar unterstützung und zweitens habe ich keine Ahnung wie ich die Verbindung zum SDI-Dokument bekomme.
    Alle Versuche ein Fenster-Rahmenobjekt zu erstellen mit einer von CScrollView abgeleite View-Klasse und verbindung zum SDI-Document sind fehlgeschlagen.
    Jemand eine Idee, oder Erfahrung wie warum was geht oder auch nicht.

    Nach stundenlangen erfolglosen Rumprobieren, wäre ein Erfolgserlebnis mal wieder genau das was ich brauche.

    Grüße an alle und schönen Tag

    Wolfgang



  • wie waers mit nem guten MFC Buch 🙂



  • hi,

    also in der init instance sieht das so aus:

    HWND hWnd;

    hInst = hInstance;

    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT,0, NULL, NULL, hInstance, NULL );

    if( !hWnd)
    {
    return false;
    }

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow( hWnd );

    also CreateWindow erzeugt und ShowWindow zeigt an. Hoffe das hilft.

    gruesse rene



  • sehr lustig.
    Ich habe mehrere Bücher, und wie geschreiben schon mehrere Stunden versuche hinter mir.
    Und bevor du kommst mit dem Umschalten der Ansicht, beschrieben zB in der MSDN. das funzt nicht. Habe ich natürlich versucht. Meine SDI hat zwei Ansichtsklassen angezeigt mit CSplitterWnd. Das Umschalten zur neuen Ansicht funzt, zurück nicht mehr.
    Konstruktive Idee?
    Danke und tschüss
    Wolfgang

    Danke Rene!

    Mein Code:

    pMenu->LoadMenu(IDR_ZUSAMMENFASSUNG_FRAME);
      if(!CreateEx(0, AfxRegisterWndClass(0), _T(""), WS_OVERLAPPEDWINDOW|WS_VISIBLE ,100,100,700,700,NULL, pMenu->operator HMENU()))
        AfxThrowResourceException();
    
      this->SetWindowText("Zusammenfassung");
      CClientDC dc(this);
    
      ASSERT(pDoc);
      this->pDocument_ = pDoc;
    

    Das funktioniert soweit. Aber this ist von CWnd abgeleitet. Eine Klasse abegeleitet von CScrollView bekomme ich nicht zum laufen. Denn diese braucht WS_CHILD als Style. Da ich das MainFrame nicht benutzen kann, wegen dem CSplitterWnd, brauche ich wieder eine andere Rahmenfensterklasse. Bis jetzt habe ich aber es nicht geschafft diese Klasse zu erzeugen, mit meiner SCRollView-Ansichtsklasse zu initialisieren und anzuzeigen.
    Kann mir jemand weiterhelfen?
    Vielen Dank und Grüße an alle
    Wolfgang


Anmelden zum Antworten