SAMPLE
ドラッグドロップしたパスを表示
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
);