Click here to Skip to main content
15,885,693 members
Articles / Desktop Programming / MFC

A Generic IDropTarget COM Class for Dropped Text

Rate me:
Please Sign up or sign in to vote.
4.17/5 (5 votes)
9 Nov 2000 118.7K   2K   53   8
Simple step by step article explaining how to implement a drop target using OLE.

This article is part of the drag and drop interface samples.

  1. Serializing ASCII Data
  2. Modeless child dialog
  3. Modeless sibling dialog
  4. The drag source
  5. The MFC drop target
  6. The TBTextTarget class

Doing It the OLE Way... An Interface Class to Derive From

If you are a MFC purist and only want to have CObject derived classes in your project, then consider the pure MFC drop target.

You will find the sample project in step3generic or you may download only the TBTextTarget class.

A Generic IDropTarget COM Class for Dropped Text

I promised you "a better way" and I fulfill this promise now - at least half of it because it's for the drop target, the IDropSource and IDataObject parts are missing, but the MFC support for the begin of dragging out of CListCtrl is quite good (perhaps someone else can take this as an exercise and place these wrappers in the comments for this article. :)

The OLE docs say: "If you want your (window) class to be drop-enabled, implement a IDropTarget interface." Nice - what's that? In plain English, I'd say: your drop-enabled class needs a couple of functions which do the right things. The bundle of these functions make out "the interface" and because some interfaces are "at the top" of others, you have - a kind of class hierarchy!

Due to the fact that we are talking about text dragging the private data format described in the other articles of this series. Implement the drag sources as common interface (CF_TEXT, see "Data is going abroad...") for the drop part and do the following (and compare with the pure MFC stuff!)

  1. Create your CWnd-based class (CYourClass, e.g. your dialog) as usual.
  2. Include the files TBTextTarget.h and TBTextTarget.cpp in your project.
  3. Go to the class definition of CYourClass and derive it from TBTextTarget too: e.g., the line...
    C++
    class CDropDialog : public CDialog 
    ...will become:
    C++
    class CDropDialog : public CDialog, TBTextTarget 
  4. Don't forget to #include "TBTextTarget.h"
  5. At a point where this window is created (for example: OnInitDialog is great), tell Windows that you are drag&drop-enabled:
    C++
    BOOL CDropDialog::OnInitDialog()
        {
            CDialog::OnInitDialog();
            ::RegisterDragDrop(GetSafeHwnd(), this);
            // the other stuff follows ....
        }
  6. Add this function to CYourClass (it's pure virtual in TBTextTarget because it depends on YOU what you do with YOUR data):
    C++
    void ProcessData(CString Data)

    This function will be called when a text was dragged into your window. Do with it whatever you like (or need). For example:

    C++
    CDropDialog::ProcessData(CString Data)
    {
       CString t1(Data), t2;
       int idx = t1.Find('\n');
    
       while (idx !=-1)
       {
          t2 = t1.Left(idx);
          t1 = t1.Mid(idx+1);
          InsertRow(t2);
          idx = t1.Find('\n');
       }
    }   

License

This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.

A list of licenses authors might use can be found here.


Written By
Web Developer
Germany Germany
PhD Chemist,
programming with MSVC & MFC since 1996

Comments and Discussions

 
QuestionHow to drag a file to activex control in ie. [modified] Pin
leaf-v19-Aug-06 21:15
leaf-v19-Aug-06 21:15 
QuestionHow to drag and drop hyperlinks? Pin
Agent of FBI3-Sep-03 14:21
Agent of FBI3-Sep-03 14:21 
GeneralWhy is it the Drop position is not accurate Pin
Anthony_Yio5-Mar-03 23:40
Anthony_Yio5-Mar-03 23:40 
GeneralRe: Why is it the Drop position is not accurate Pin
Anthony_Yio6-Mar-03 22:46
Anthony_Yio6-Mar-03 22:46 
Questioncan i drag drop a bitmap using clipboard CF_BITMAP Pin
shokisingh23-Mar-02 2:27
shokisingh23-Mar-02 2:27 
GeneralCorrection: InterfaceView.obj : error LNK2001: unresolved external ... Pin
Thomas Blenkers3-Jun-01 11:45
Thomas Blenkers3-Jun-01 11:45 
QuestionCan not download the source code. Pin
14-Nov-00 23:56
suss14-Nov-00 23:56 
AnswerRe: Can not download the source code. Pin
Thomas Blenkers3-Jun-01 11:49
Thomas Blenkers3-Jun-01 11:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.