SDI und DialogFeld



  • Hi zusammen,

    ich hab mir grad ne SDI Anwendung gebastelt und brauche ein Dialogfeld, wie ich das einfügen muss und wie ich über ne Variable drauf zugreif weiss ich, ich möchte aber über einen Pointer auf das Dialogfeld zugreifen.

    Bei Steuerelementen funktioniert das doch so :

    CListBox *pListBox =(CListBox*)GetDlgItem(IDD_ListBox))
    

    mit GetDlgItem() kmm ich an den Handle des ListBox Controls aber wie komm ich an den Handle des ganzen DialogFledes ?

    besten Dank schon mal
    ShadowEater



  • Zeig bitte mal die Stelle, wo du den Dialog aufrufst.

    Achja, überleg dabei gleich mal, was &dlg macht. 😉



  • Ich rufs in der Fnkt :

    void CTestView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    ?????????????????????????????????????????????????????????????
    		// pDlg->DoModal ();
    
    }
    

    auf, aber ich weiss net wie .

    & ist in der Deklaration Referenz ansonsten Adressoperator !

    regards
    ShadowEater 😉



  • Hm, eigentlich wollte ich sehen, wo du die Variable deklarierst, war doof ausgedrückt.



  • Wenn ichs über ne Variable mach dann als Member meises Viw.h aber das will ich ja net, ich will nur mt nem Zeiger auf das Dialogfeld arbeiten ????????

    CListBox *pListBox =(CListBox*)GetDlgItem(IDD_ListBox))
    

    so wie mit nem Control !

    regards
    ShadowEater



  • Wer will denn dieses Handle haben? Im Dialog erreichst du dich selber über den this-Zeiger, außerhalb hast du deine Variable pDlg, über die du auf alle wichtigen Member zugreifen kannst.



  • Moment ich befinde mich in meinem View :

    void CTestView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
            // Diese Funktion ist im View
            // pDlg->DoModal ();
    
    }
    

    meine erstellte Dialog-Klasse heisst myDialog.h.

    Was ich mochte ist lediglich aus der Funktion OnRButtonDown() im View per Zeiger ein Dialogfeld aufrufen IDD_DIALOG !

    regards ShadowEater



  • Also exisitert zu dem Zeitpunkt noch kein entsprechender Dialog (auf dem Bildschirm), richtg? Das heißt, du mußt den Dialog in der Funktion erstellen und dann starten:

    CMyDialog dlg;//eigene Dialog-Klasse
    dlg.DoModal();
    
    //oder
    
    CDialog dlg(IDD_DIALOG,this);//Dialog aus Ressource
    dlg.DoModal();
    


  • Hi CStoll,

    hmmmmmm Deine möglichkeit war mir schon klar aber durch

    Also exisitert zu dem Zeitpunkt noch kein entsprechender Dialog

    bin ich drauf gekommen:

    void CTesteleView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    	myDialog *dlg = new myDialog;//aufm Heap erzeugen  :+1: 
    	dlg->DoModal(); 	
    }
    

    aber welche Mögl. hälst Du jetzt für besser, ich hab schon 100 Fach gelesen Zeiger sind immer die bessere Wahl da sie schneller flexibler usw. sind ?
    Gerade bei MFC wär man damit gut beraten!

    regards
    ShadowEater



  • Ich würde in dem Fall lieber eine lokale Variable nehmen - von der Geschwindigkeit macht das afaik keinen Unterschied. (und bei deiner Variante über Zeiger hast du schon ein Speicherleck geöffnet - das kann bei länger laufenden Programmen zum Problem werden)


Anmelden zum Antworten