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)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_MESSAGE(WM_DROPFILES,OnDropFiles) 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, -1, szDroppedFile, MAX_PATH);
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) }
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))