Click here to Skip to main content
Click here to Skip to main content

Drag and Drop in a Dialog

, 6 Dec 2012 CPOL
Rate this:
Please Sign up or sign in to vote.
Simple Drag and Drop functionality in a dialog.

Introduction

Here is a simple method to have a Drag and Drop feature in your dialog based applications. To provide Drag and Drop we have a Windows Message Handler called WM_DROPFILES. Handle this message through the ON_MESSAGE message map to capture the dropped files.

Message Handler

//
 BEGIN_MESSAGE_MAP(CComGuidFinderDlg, CDialog)
  //{{AFX_MSG_MAP(CComGuidFinderDlg)
  ON_WM_PAINT()
  ON_WM_LBUTTONDOWN()
  ON_MESSAGE(WM_DROPFILES,OnDropFiles)// Message Handler for Drang and Drop
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()
//

Now it is time to handle the WM_DROPFILES messages through a user defined method. The function prototype should be like this:

LRESULT  OnDropFiles(WPARAM wParam,LPARAM lParam);

Finally we have a function to capture the drop events. wParam is a handle to the HDROP structure describing the dropped files. To get info about the dropped file, i.e., the file name used:

DragQueryFile(hDrop,    // Struture Identifier
        -1,        // -1 to Drop more than one file or ( integer 0 to max )
                   // to drop selected No of files
        szDroppedFile,// Droped File Name
        MAX_PATH);   // Max char

So now we have done all possible coding in our dialog based application to handle the Drag & Drop feature. But still it is handicapped. Handling the Drop event is not enough to ensure the Drag & Drop feature. We need to register our window to accept the dropped file using:

BOOL CComGuidFinderDlg::OnInitDialog()
{
  ......
  .....
  DragAcceptFiles(TRUE) // To Accept Dropped file Set this TRUE
}

Good... That's all, and we have done well!

I added one more feature in this sample, i.e., moving our dialog by clicking on anywhere on the window. This can be done by posting the WM_NCLBUTTONDOWN message to HTCAPTION handle this statement in OnLButtonDownMessage(...) .

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y))

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Jibesh
Technical Lead
United States United States
a hard core developer

Comments and Discussions

 
QuestionI think you can post this article as a trick or tip. right? PinmemberSajeeshCheviry4-Jan-13 19:49 
AnswerRe: I think you can post this article as a trick or tip. right? Pinmemberjibesh14-Jan-13 14:18 
GeneralRe: I think you can post this article as a trick or tip. right? PinmemberSajeeshCheviry14-Jan-13 18:33 
GeneralMy vote of 5 Pinmemberjustdownloads13-Dec-12 1:49 
QuestionGreat Article PinmemberJosephFox19-Feb-12 3:38 
GeneralRe: Great Article Pinmemberjibesh6-Dec-12 12:01 
GeneralMy vote of 5 Pinmember ThatsAlok 7-Jul-11 22:16 
Questionnice article Pinmember ThatsAlok 7-Jul-11 22:16 
GeneralMy vote of 5 PinmemberDemiG19-Jul-10 19:16 
GeneralDragAcceptFile PinmemberGernot Frisch18-Nov-08 0:06 
It's DragAcceptFiles(TRUE);
 
Maybe one can fix that typo?
 
In the "OnDropFiles" function, return 0.
GeneralRe: DragAcceptFile Pinmemberjibesh6-Dec-12 12:03 
GeneralSolution: How to move your dialog by clicking on anywhere on the window in a Win32 API Non MFC App Pinmembercffhgfdf22-Sep-06 2:34 
Generalsimple, good, usable PinmemberMessnerEW11-Oct-04 21:21 
GeneralI really like the simplicity Pinmemberhockeyman13-Sep-04 9:26 
GeneralRe: I really like the simplicity Pinmemberhockeyman13-Sep-04 9:31 
Generalgood job Pinmembershaitan18@yahoo.com18-Feb-04 11:32 
QuestionWhom this article is targeted? Pinmembersuper18-Nov-03 21:14 
AnswerRe: Whom this article is targeted? Pinmemberjibesh18-Nov-03 21:35 
GeneralRe: Whom this article is targeted? Pinmemberarmentage19-Nov-03 4:50 
GeneralRe: Whom this article is targeted? Pinmemberjibesh19-Nov-03 5:20 
QuestionHow the rating is found? Pinmemberkezhu18-Nov-03 13:18 
AnswerRe: How the rating is found? PinmemberAlex Farber19-Nov-03 7:44 
GeneralMissing File. PinmemberWREY17-Nov-03 21:22 
GeneralRe: Missing File. Pinmemberjibesh17-Nov-03 21:34 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.141220.1 | Last Updated 6 Dec 2012
Article Copyright 2003 by Jibesh
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid