Drag-and-Drop



  • Hallo zusammen!
    Sofort zur Sache. Wie kann ich das Prinzip Drag-and-Drop umsetzen? Ich will, wenn ich auf ein Edit-Feld eine Datei oder ein Verzeichnis per Drag-and-Drop ziehe, daß in diesem der Pfad der Datei (oder des Verzeichnises) steht.

    Mein Code sieht so aus:

    BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_DROPFILES)
        {
              // hier möchte ich ein String mit dem Pfad bilden          
              // und dem Edit-Feld zuweisen. Das einzige, das sich
              // an der Stelle ändert, ist pMsg->wParam. Aber wie
              // ich daraus den Pfad herausfinde, weiß ich nicht
            }
    
        return CDialog::PreTranslateMessage(pMsg);
    }
    
    Hat jemand 'ne Idee?
    


  • Hallo,

    In MessageMap einfügen:

    ON_WM_DROPFILES();

    Im dem Ereignis OnCreate:
    DragAcceptFiles();

    Dann Funktion einfügen (Mit dem KlassenAssi)
    OnDropFiles(HDROP hDropInfo)
    {
    char szInput[400];
    DragQueryFile(hDropInfo,0,szInput,sizeof(szInput));
    DragFinnish(hDropInfo);

    (DeinEdit).SetItemText(szInput);

    CDialog::OnDropFiles(hDropInfo);
    }

    So sollte das Funktionieren.

    Gruß

    Ocrana



  • Danke!
    werde gleich ausprobieren



  • Hi!
    Bei mir geht so leider nicht. Der Klassen-Assi bietet mir die Funktion OnDropFiles(HDROP hDropInfo) nicht an. Ich habe aber in dem Ressourcen-Editor das Flag "Datei akzeptieren" gesetzt (weiß nicht, ob dies wichtig ist) 😞



  • Hi!
    Das Problem habe ich gelöst, indem ich eine Klasse CDropEdit erstellt habe, von CEdit abgeleitet, und für die Klasse die Funktion OnDropFiles(hDropInfo) überschrieben habe.

    Danke für die Anregung 😃


Anmelden zum Antworten