Eigenen CDialog-Klasse als Basis für Dialog



  • Hallo, ich möchte einen Assistenten schreiben, der aus mehreren Dialogen besteht. Jetzt habe ich mir eine "Muster"-Klasse CMyDialog (von CDialog abgeleitet) erstellt, welche ich auch gerne für die weiteren Dialoge als Basis hätte.

    Wenn ich mir jetzt durch die (VC Dialog)-Assistenten eine neue Klasse erzeugen lasse und einfach CDialog durch CMyDialog ersetze funzt dass nicht...

    Kann mir bitte jemand einen Typ geben?



  • Hast du nur CDialog durch CMyDialog ersetzt, ohne die MyDialog.h zu includieren ?



  • ja hab ich!

    IMPLEMENT_DYNAMIC(CMyDialog2, CMyDialog1)
    CMyDialog2::CMyDialog2(CWnd* pParent /*=NULL*/)
        : CDialog(CMyDialog2::IDD, pParent)
    {
    }
    

    Folgenden Fehlermeldung beim compilieren:

    ... error C2614: CMyDialog2: Unzulässige Elementinitialisierung: 'CDialog' ist weder Basis noch Element



  • Ja, dann schreib doch da deine Basisklasse hin. 🙄

    [cpp]
    IMPLEMENT_DYNAMIC(CMyDialog2, CMyDialog1)
    CMyDialog2::CMyDialog2(CWnd* pParent /=NULL/)
    : CMyDialog1(CMyDialog2::IDD, pParent)
    {
    }[/cpp]



  • Hab ich auch schon probiert 😞

    Dann kommt folgende Fehlermeldung:

    ... error C2660: 'CMyDialog1::'CMyDialog1: Funktion akzeptiert keine 2 Argumente



  • Und? Du musst doch wissen, was der an Parametern haben will.

    Zeig doch den Konstruktor mal, oder passe ihn an. Das liegt jetzt völlig bei dir, dass das auch akzeptiert wird. 🙂



  • Ich habe in CMyDialog1 keinen passenden Konstruktor, dass ist richtig. Aber ich dachte wenn ich die Klasse von CDialog ableite, werden auch die Konstruktoren geerbert?!

    Wie muss den der Konstruktor für den Dialog (CMyDialog1) mit 2 param richtig aussehen, bzw. wie krieg ich raus, wie der von CDialog aussieht?



  • Brauchst du den Zeiger auf den Parent in deiner Basisklasse?

    Wenn nein, kannst du das so machen, wie ich das habe:

    CBasisDlg::CBasisDlg(UINT f_nIDD)
    	: CDialog(f_nIDD, NULL)
    {
    }
    

    Das kannst du dann so aufrufen:

    IMPLEMENT_DYNAMIC(CMyDialog2, CMyDialog1)
    CMyDialog2::CMyDialog2(CWnd* pParent /*=NULL*/)
        : CMyDialog1(CMyDialog2::IDD)
    {
    }
    

    Edit: Sonst musst du den Zeiger natürlich auch weitergeben. 🙂


Anmelden zum Antworten