DragDropをうけつける


SAMPLE https://www.dropbox.com/s/qbd20m0rzia1rqn/dragdrop.exe( ドラッグドロップしたパスを表示 ) DragDropを受信可能にする。 ウィンドウ以外でもコントロールならば、Dialogでも何でも受け付けることができる。
# include<ShellAPI.h> # pragma comment( lib, "Shell32.lib" ) HWND hWnd = CreateWindowEx( WS_EX_ACCEPTFILES, // スタイルにこのフラグをたてる "test" , title, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, w, h , NULL , NULL , hInstance , NULL ); dlgProc() { case WM_INITDIALOG: DragAcceptFiles( hWnd, TRUE ); return TRUE; // ドロップされた時のイベントコールバック case WM_DROPFILES: { // ドロップされたファイル数を取得して int nr = DragQueryFile( wp, -1, NULL, 0 ); // そのパスを取得する。 char buf[256]; for( int i=0; i<nr; i++ ){ DragQueryFile( wp, i, buf, sizeof(buf) ); } DragFinish( wp ); } return TRUE; }



DragAcceptFiles


SYNTAX DragAcceptFiles( HWND, BOOL ); DESC 指定 wnd に対して, DD の受理を設定 WM_DROPFILES が届く
DragAcceptFiles( hWnd, true );
TCHAR str[NAME_SIZE ]; DragQueryFile( (HDROP)wp, 0, str, sizeof(str) ); DragFinish( (HDROP)wp );


DragQueryFile


SYNTAX UINT DragQueryFile( HDROP, // file 情報を含む構造体ID. WM_DROPFILES::wp にある. UINT iFile, // query する file idx ( 複数の場合 ) LPSTR str, UINT szBuf // ); RET File の個数 || Buffer DESC filepath, 個数を取得する
DragQueryFile( (HDROP)wp, 0, str, sizeof(str) ); // 解放 DragFinish();



DragFinish


SYNTAX void DragFinish( HDROP hDrop ); DESC Windows が file 名転送のために 確保した Memory を開放 Resource が Interface を超える例
wndProc() { case WM_DROPFILES: SetForegroundWindow( hWnd ); DragQueryFile(); DragFinish(); }



CreateWindowEx


SYNTAX hWndClient = CreateWindowEx( WS_EX_CLIENTEDGE, // 追加パラメータ "MDICLIENT", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0, 0, 0, 0, // 意味なし hWnd, (HMENU)0, hInst, &ccs );