1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

MFC und Dialoge

  • \LaTeX
  • 6. Dezember 2004 um 13:22
  • Unerledigt
  • \LaTeX
    7
    \LaTeX
    Mitglied
    Punkte
    425
    Beiträge
    66
    • 6. Dezember 2004 um 13:22
    • #1

    Hallo Leute..
    Ich haette da folgendes Problem: Hab eine MDI-Anwendung mit MFC geschrieben, die zwei Dialogfenstern (nicht modal) verwenden soll. Ich versuche daher in meiner Klasse 'MainFrm::CMDIFrameWnd' in der OnCreate() Methode die Dialoge zu erzeugen:

    Code
    MyDlg1 *my_dlg_1_; // member of MainFrm
    MyDlg1 *my_dlg_2_; // member of MainFrm
    ...
    int MainFrm::OnCreate(...)
    {
      ...
      if (my_dlg_1_ == NULL)
      {
        my_dlg_1_ = new ControlDlgBar(this);
        if (!my_dlg_1_->Create(IDD_MY_DLG_1, this))
        {
          TRACE0("Failed to create control bar\n");
          return(-1);
        }
        my_dlg_1_->ShowWindow(TRUE);
      }
    
    
      if (my_dlg_2_ == NULL)
      {
        my_dlg_2_ = new ControlDlgBar(this);
        if (!my_dlg_2_->Create(IDD_MY_DLG_2, this)) // !!
        {
          TRACE0("Failed to create control bar\n");
          return(-1);
        }
        my_dlg_2_->ShowWindow(TRUE);
      }
    }
    Alles anzeigen

    Der erste Dialog wird korrekt erzeugt, dafuer aber schafft er den zweiten nicht. Die Dialoge sind aehnlich aufgebaut (so wie der .NET Wizard sie generiert). Hab mir den Verlauf im Callstack angeschaut und er das Problem tritt in der Anweisung

    Code
    309  hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
    310    pParentWnd->GetSafeHwnd(), AfxDlgProc);

    im File 'dglcore.cpp (Methode: Cwnd::CreateDlgIndirect(...)) auf. D.h. CreateDialogIndirect(...) liefert in Zeile 309 NULL, was dazu fuehrt, dass er dann folgende Fehlermeldung ausgibt:

    Code
    Failed to create my_dlg_2
    Warning: Window creation failed: GetLastError returns 0x00000000
    Warning: failed to create CFrameWnd.

    Meine Frage nun: Habt ihr eine Ahnung wieso er das macht? Also wieso er das zweite Dialog nicht erzeugen kann, wo er doch den erste erzeugt?

    PS: Hab auch versucht, die Aufrufe zu vertauschen, also zuerst dlg2 und danach dlg1 zu erzeugen, aber das Erzeugen funktioniert gleich beim zweiten (dlg2) nicht.

    Bin fuer jeden Hint dankbar..
    Danke im Voraus..
    ciao..

  • Ubik
    5
    Ubik
    Mitglied
    Punkte
    205
    Beiträge
    39
    • 20. Dezember 2004 um 15:00
    • #2

    Nimmst du für beide Dialoge dieselbe Klasse oder ist das ein Tippfehler?
    Wenn du nur den 2.Dialog erstellst und öffnest, geht's dann? Wenn nicht, liegt der Fehler wohl in der Ressourcen-Datei des Dialogs.

  • \LaTeX
    7
    \LaTeX
    Mitglied
    Punkte
    425
    Beiträge
    66
    • 2. Januar 2005 um 18:05
    • #3
    Zitat von Ubik

    Nimmst du für beide Dialoge dieselbe Klasse oder ist das ein Tippfehler?

    Eigentlich ist es ein Tippfehler aber es gehen beide Varianten nicht..

    Zitat von Ubik

    Wenn du nur den 2.Dialog erstellst und öffnest, geht's dann? Wenn nicht, liegt der Fehler wohl in der Ressourcen-Datei des Dialogs.

    Cool.. hast recht gehabt.. da war der Fehler. Ich hab' mir aber die Fehlersuche erspart, gleich ein neues Projekt angefangen und die alten Files eingefuegt (bis auf das Ressource-File natuerlich)..

    Nochmals danke.. hat geholfen..
    ciao..

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung