Drag'n Drop



  • Hallo zusammen,

    ich versuche bei einem Dialogfeld Drag'n Drop zu implementieren. Da ich unterscheiden möchte, ob mit rechter oder linker Maustaste gedropped wurde, hab ich eine Klasse von COleDropTarget abgeleitet, die die Methoden implementiert.
    Ich kann auch mittels TRACE-Makros sehen, daß ich in die einzelnen Methoden springe, außer in OnDrop. Wenn ich den Bereich des Dialogfelds verlasse, komme ich in OnDragLeave, was richtig ist - jedoch auch, wenn ich droppe.
    Kurz: ich komme nicht in die OnDrop-Methode rein, sondern lande in OnDragLeave.
    Nachdem ich aber in alle anderen kommen (OnDragEnter, OnDragOver, OnDragLeave), kann ich mir einen Fehler bei der Registrierung nicht vorstellen. Ich benutze übrigens VC.net unter WinXP.

    Danke im voraus...
    E.P.R.



  • Gibst Du auch unter OnDragOver einen gültigen Wert zurück?



  • DROPEFFECT_LINK resp. DROPEFFECT_COPY sollten gültige Werte sein!?



  • Wie sieht Deine Funktiolnsdeklaration von OnDrop aus?



  • );

    BOOL OnDrop(CWnd*, COleDataObject*, DROPEFFECT, CPoint
    


  • versteh ich net, bei mir hats bisher immer gefunzt



  • wenn ich meine klasse von IDropTarget ableite und die drop-methode folgend deklariere, komm ich in diese rein. hab nur keine ahnung, was ich mit dem com-zeug dann machen soll!??

    STDMETHOD(Drop)(IDataObject*, DWORD, POINTL, DWORD*);

    RenéG: hast du vielleicht beispielcode für einen dialog mit drag'n drop, dann könnt ich vergleichen, aber keine sdk-lösung (hätt ich die doch drinnen lassen... 😉



  • Kannst Dir ja mal folgendes Bsp. anschauen:
    http://people.freenet.de/Fury73/TripleTriad_Project.html



  • Das hatte ich schon gefunden, da kam das letzte Codefragment her. Ich habe mit der letzten Frage eine Möglichkeit gesucht, die HDROP-Struktur zu bekommen. Hab ich inzwischen auch. Wen's interessiert:

    COleDataObject dataobj;
        HGLOBAL        hglobal;
        HDROP          hdrop;
    
        dataobj.Attach(pDataObj, FALSE);   // pDataObj ist Parameter der Methode
        hglobal = dataobj.GetGlobalData(CF_HDROP);
    
        if(hglobal) {
            hdrop = (HDROP)GlobalLock(hglobal);
            // Benutze hdrop ...
            GlobalUnlock(hglobal);
        }
    

    Warum aber geht bei mir nur pures COM richtig, MFC aber nicht? COM geht zwar, ich kann damit auch arbeiten, aber verstehen...????


Anmelden zum Antworten