ウィンドウが、ドラッグ&ドロップを受け入れるようにする |
|
[ ヘッダーファイル ]
[ 初期化 ]
| hWnd = CreateWindow(
szWindowClass
,szTitle
,WS_OVERLAPPEDWINDOW
,CW_USEDEFAULT
,0
,CW_USEDEFAULT
,0
,NULL
,NULL
,hInstance
,NULL);
if ( !hWnd ) {
return FALSE;
}
DragAcceptFiles( hWnd, true );
| |
|
または
| hWnd = CreateWindowEx(
WS_EX_ACCEPTFILES
,szWindowClass
,szTitle
,WS_OVERLAPPEDWINDOW
,CW_USEDEFAULT
,0
,CW_USEDEFAULT
,0
,NULL
,NULL
,hInstance
,NULL);
| |
|
または
|
|
[ グローバル変数 ]
[ WM_DROPFILES メッセージの追加 ]
|
|
| case WM_DROPFILES:
{
UINT nFileCnt;
// ドロップされたファイルの数
nFileCnt = DragQueryFile(
(HDROP)wParam,
0xffffffff,
DropFileName,
MAX_PATH
);
// 2件以上の場合
if ( nFileCnt > 1 ) {
buffer[0] = 0x00;
SetWindowText( hMedit, "" );
RedrawWindow(
hWnd,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE
);
char *TextData = new char[64000];
TextData[0] = 0x00;
int i,nLen;
char CrLf[4] = { 0x0d,0x0a,0x00 };
for( i = 0; i < (int)nFileCnt; i++ ) {
// ドロップデータの取得
DragQueryFile(
(HDROP)wParam,
i,
DropFileName,
MAX_PATH
);
nLen = lstrlen( TextData ) +
lstrlen( DropFileName ) + 2;
if ( nLen - 1 > 64000 ) {
break;
}
lstrcat( TextData, DropFileName );
lstrcat( TextData, CrLf );
}
SetWindowText( hMedit, TextData );
delete [] TextData;
}
// 1件の場合
else {
DropFileName[0] = 0x00;
// ドロップデータの取得
DragQueryFile(
(HDROP)wParam,
0,
DropFileName,
MAX_PATH
);
if ( DropFileName[0] != 0x00 ) {
lstrcpy( buffer, DropFileName );
GetData( hWnd );
RedrawWindow(
hWnd,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE
);
}
}
}
break;
| |
|
|
|