2017-10-09 11 views
-3

はC++ Win32アプリケーションで動作しており、DragAndDrop操作を実装しています。WndProcWM_DROPFILESでコールするエクスプローラからエクスプローラのファイルとフォルダをドラッグできますDragAndDropファイルとフォルダをWin32アプリケーションからエクスプローラにしようとしています。Win32アプリケーションからファイルとフォルダをドラッグしてエクスプローラにドロップする方法

Karlsson’s Drag-and-Drop Cテキストドロップのライブラリを使用していますが、私の要件は、ファイルとフォルダをwin32アプリケーションからエクスプローラにドラッグアンドドロップすることです。以下は、ドロップテキストのサンプルコードです。

case WM_LBUTTONDOWN: 
{ 
    char* text = "Hello, World! This is the drop source."; 
    HANDLE text_on_heap; 
    PMYDROPSOURCE text_drop_source; 
    CLIPFORMAT cf[1] = { CF_TEXT }; 
    text_on_heap = GlobalAlloc(GMEM_FIXED, strlen(text) + 1); 
    if (NULL == text_on_heap) break; 
    strcpy((char*)text_on_heap, text); 
    text_drop_source = CreateMyDropSource(FALSE, cf, &text_on_heap, 1); 
    if (NULL != text_drop_source) 
    { 
    /* Drop source created, so begin the drag. This will block. */ 
     MyDragDropSource(text_drop_source); 
    /* Drag-drop is done so destroy the drop source. */ 
     FreeMyDropSource(text_drop_source); 
    } 
    /* Free up the buffer; drag-drop is finished. */ 
    GlobalFree(text_on_heap); 
    return TRUE; 
} 
+0

あなたのコードはここでファイルを操作しようとしません –

+0

@DavidHeffernanはい。そのドラッグ&ドロップのサンプルコードは、ドラッグアンドドロップのファイルとフォルダを探しています。同じ方法私はCF_HDROPしようとしたが、動作しません。 – Krish

+2

なぜ研究をしないのですか?これがあれば、たくさんの例があります。 –

答えて

1

Explorerにドラッグされたファイルを受け入れるには、CF_HDROPデータをいくつか作成してデータオブジェクトに入れるだけです。 IDropSourceとIDropTargetを使用する必要があります。

したがって、DROPFILES構造体が必要です。作成するのはちょっと難しいです(いつも同じサイズではないので)。

IDataSourceを作成してDoDragDropを実行する必要があります。あなたがここMSDN

に概要を見つける

MFCでの動作を示した完全なサンプルです。最後のセクションを見てください。

プレーンなWin32バージョンへのコードはhereです。それは小さなライブラリーを公開していますsourceforge

+0

のために投稿しました。うん、絶対に正しい私はそれのために行くだろう。 – Krish

+1

'CF_HDROP'はファイルシステム上の物理ファイルに対してのみ機能することに注意してください。仮想ファイルをドラッグ&ドロップするには、代わりに 'CFSTR_FILEDESCRIPTOR'と' CFSTR_FILECONTENTS'を使います。 –

+0

@RemyLebeauこの情報に感謝します。 – Krish

関連する問題