ドラッグ&ドロップを使用する

  ウィンドウが、ドラッグ&ドロップを受け入れるようにする



[ ヘッダーファイル ]
  
#include "shellapi.h"
  

[ 初期化 ]
  
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);
  

または

デザイナのプロパティで、「ドラッグドロップを許可」をチェック




  メッセージ処理



[ グローバル変数 ]
  
char DropFileName[MAX_PATH];
  

[ WM_DROPFILES メッセージの追加 ]
  
case WM_DROPFILES:
	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;
  



  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;
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ