BOOL COLEDragDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    SetIcon(m_hIcon, TRUE);            // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    m_vDir1 = m_Dir1.GetControlUnknown();

    m_vDir1->OLEDropMode = OLEDropSftControlManual;
    m_vDir1->AutoExpandDragDrop = VARIANT_TRUE;
    return TRUE;
}

void COLEDragDlg::OnOLEDragDropSftDirectory1(LPDISPATCH FAR* Data, LPDISPATCH FAR* Folder, long FAR* Effect, short FAR* Button, short FAR* Shift, float FAR* x, float FAR* y, BOOL FAR* DefaultHandling) 
{
    IVDMDataObjectPtr pData(*Data);
    ISftDirectoryFolderPtr pFolder(*Folder);

    if (pData->GetFormat(sftCFFiles)) {
        int i;
        for (i = 1 ; i <= pData->Files->Count ; ++i) {
            CString str;
            CString strName((LPCWSTR)pData->Files->Item[i]);
            str.Format(_T("\"%s\" being dropped."), strName);
            MessageBox(str);
            // perform your own processing here
        }
    } else {
        // some other format
    }
    // make sure the control doesn't perform its usual default handling of
    // the files (copy/move, etc.)
    *DefaultHandling = VARIANT_FALSE;
}

void COLEDragDlg::OnOLEDragOverSftDirectory1(LPDISPATCH FAR* Data, LPDISPATCH FAR* Folder, long FAR* Effect, short FAR* Button, short FAR* Shift, float FAR* x, float FAR* y, long FAR* State, BOOL FAR* DefaultHandling) 
{
    IVDMDataObjectPtr pData(*Data);
    ISftDirectoryFolderPtr pFolder(*Folder);

    *Effect = 0;
    if (pData->GetFormat(sftCFFiles)) {
        if (pFolder != NULL) {
            // we'll accept anything
            *Effect = 3; // vbDropEffectCopy | vbDropEffectMove
        }
    }
    // make sure the control doesn't perform its usual default handling of
    // the files (copy/move, etc.)
    *DefaultHandling = VARIANT_FALSE;
}