Last Updated 2003/12/09
Programming Tips Visual C++ MFC ドラッグアンドドロップ  索 引 
ファイルのドロップ
2003/12/09

ファイルだけをドロップ可能にするには,
DragAcceptFiles(TRUE);
とする.
CWinApp::InitInstance() あたりで m_pMainWnd->DragAcceptFiles() とすればファイルのドロップが可能です.
(または,PreCreateWindow() で CREATESTRUCT の dwExStyle に WS_EX_ACCEPTFILES のフラグを設定する)

ドロップされたら CView::OnInitialUpdate() が呼び出されます.
ドロップされたファイルパスを取得するには GetDocument()->GetPathName(),ドロップされたファイル名は GetDocument()->GetTitle() で取得可能.

上記以外の方法では,WM_DROPFILES のハンドラを作成する.
そのハンドラにて,
    // ドロップファイル数
    int DropFileNum = ::DragQueryFile(hDropInfo, 0xffffffff, NULL, 0); 
    for(int i = 0; i < DropFileNum; i++) { 
        char DropFileName[MAX_PATH];             // ドロップファイル名
        ::DragQueryFile(hDropInfo, i, DropFileName, sizeof(DropFileName)); 
    } 
    ::DragFinish(hDropInfo); 
とする.

このハンドラは CMainFrm にて定義する.(m_pMainWnd->DragAcceptFiles() であるため)
CView で定義したければ CView にて DragAcceptFiles() して,ドロップを許可しなければならない.

ファイル以外に,テキスト,URL,ショートカットなどのドロップを許可するには OLE が必要となる.


参照
ファイル以外のドロップ
エディットコントロールへのファイルドロップ
リッチエディットへのドラッグ&ドロップ
ドラッグ中のイメージ
OLEドロップでのファイル名取得
前後のTips
ファイルのドロップ

DSS ProgrammingTipsCGI Ver2.02