Zeiger auf Dialogklasse aus eigener Klasse



  • Hallo,

    ich möchte aus einer eigenen Klasse heraus ein Wert einem Textfeld der Dialogklasse zuweisen. Das ganze mach ich so:

    CTestDlg* pDlg;
    pDlg->m_ctlItemID.SetWindowText(strItemID);
    

    Wollte pDlg eigentlich auch als Membervariable definieren, da kommt aber folgender Fehler:

    error C2143: syntax error : missing ';' before '*'
    error C2501: 'CHDATestDlg' : missing storage-class or type specifiers
    error C2501: 'pDlg' : missing storage-class or type specifiers

    An was liegt denn das? Hab die Headerdateien der Dialogklasse alle eingebunden?
    Kann mir jemand helfen?

    Danke und Gruß
    Sebastian



  • Hi,

    wenn du einen Pointer einer anderen Klasse als Member definieren willst kannst du eine Forwarddeklaration verwenden.
    Bsp.

    class ClassForPointer;
    class MyClass {
    
        ClassForPointer* m_pClass;
    };
    

    Im CPP File musst du natürlich noch das H File der "ClassForPointer" includen.

    MFG
    Kai



  • Hallo und danke erstmal.

    Hab das jetzt so gemacht, dann seh ich beim debuggen aber, dass ich noch kein Window Handle hab und deshalb abgebrochen wird.

    m_pDialog->m_ctlItem.SetWindowText("Connected");
    

    Debug: "CStatic hWnd=???"

    Wie komm ich an das Handle?



  • Hast du m_pDialog den richtigen Dialog zugewiesen?
    Ist der Dialog erstellt?

    Ich vermute das der Dialog noch nicht erstellt ist.

    MFG
    Kai



  • Also eigentlich schon.

    class CHDATestDlg; 
    
    class HDACom  
    {
    public:
    	CHDATestDlg* m_pDialog;
    }
    

    Und so greif ich darauf zu:

    m_pDialog->m_ctlItem.SetWindowText("Connected");
    

    Da denk ich der Dialog sollte doch schon erstellt sein.



  • Student schrieb:

    Da denk ich der Dialog sollte doch schon erstellt sein.

    das klingt ja sehr ungenau*g*

    msdn:
    To create a modal dialog box, construct an object on the stack using the constructor for your derived dialog class and then call DoModal to create the dialog window and its controls. If you wish to create a modeless dialog, call Create in the constructor of your dialog class.



  • Student schrieb:

    Da denk ich der Dialog sollte doch schon erstellt sein.

    Nein dem ist eben nicht so.

    Beschreibe doch mal genau was du vor hast, wir finden bestimmt eine gute Lösung.

    MFG
    Kai



  • Okay, ich glaub ich habs falsch erklärt.

    Ich hab ein Dialogfeld Anwendung. Die wird gestartet und nach einer Eingabe wird ein Wert in meine eigens geschrieben Klasse übergeben. Von dort sollen dann verschiedene Statusmeldungen in dem Anfangs erstellten Dialogfeld erscheinen. 😉

    Wär super wenn ihr mir weiterhelfen könntet!



  • So sind wir der Lösung schon näher.

    Du legst ja irgendwo dein "HDACom" Objekt an. Nun passt du von der Klasse den Constructor an, so das du einen Pointer auf den Dialog mit reinreichen kannst(HDACom(CHDATestDlg* pDialog)).
    Im C-tor setzt du nun m_pDialog = pDialog;. Jetzt ist m_pDialog initialisiert und du kannst m_pDialog verwenden.

    MFG
    Kai



  • ist der dialog eine membervariable deiner eigenen klasse?


Anmelden zum Antworten