博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
win32使用拖放文件
阅读量:6174 次
发布时间:2019-06-21

本文共 1844 字,大约阅读时间需要 6 分钟。

于win32规划,使用拖放文件操作,非经常见(不否认有些人喜欢用button打开)

中使用拖拽,非常easy,仅仅须要在创建窗体的时候使用WS_EX_ACCEPTFILES标识符,然后使用一个消息函数去处理(当然,这是属于窗体的扩展风格。所以须要使用CreateWindowEx来创建):

hWnd = CreateWindowEx(WS_EX_ACCEPTFILES, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 						 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

这样我们就能够响应相应的消息类型:

case WM_DROPFILES:		OnDropFiles(hWnd, (HDROP)wParam);		break;

响应函数,事实上挺简单的:

VOID OnDropFiles(HWND hwnd, HDROP hDropInfo){	UINT  nFileCount = ::DragQueryFile(hDropInfo, (UINT)-1, NULL, 0);	TCHAR szFileName[_MAX_PATH] = _T("");	DWORD dwAttribute;	// 获取拖拽进来文件和目录	for (UINT i = 0; i < nFileCount; i++)	{		::DragQueryFile(hDropInfo, i, szFileName, sizeof(szFileName));		dwAttribute = ::GetFileAttributes(szFileName);		// 是否为目录		if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)		{          			::SetCurrentDirectory(szFileName);       			EnumerateFiles();		}		else		{			// 文件能够直接进行播放			cout << szFileName << endl;			MessageBox(0, szFileName, "", MB_OK);		}	}	::DragFinish(hDropInfo);}

EnumerateFiles()是枚举目录中子文件的函数:

VOID EnumerateFiles(){	WIN32_FIND_DATA fd;	HANDLE hFind = ::FindFirstFile(_T("*.*"), &fd);	if (hFind != INVALID_HANDLE_VALUE)	{		do 		{			// 假设为文件夹			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)			{				if (_tcscmp(fd.cFileName, _T(".")) && _tcscmp(fd.cFileName, _T("..")))				{					::SetCurrentDirectory(fd.cFileName);    					EnumerateFiles();					::SetCurrentDirectory(_T(".."));        				}			}			// 假设为文件			else			{				string strDir;				TCHAR      lpDir[MAX_PATH];				::GetCurrentDirectory(MAX_PATH, lpDir);				strDir = lpDir;// 				if ( strDir.Right(1) != _T("\\") )// 				{// 					strDir += _T("\\");// 				}				strDir += fd.cFileName;				MessageBox(0, strDir.c_str(), "", MB_OK);			}		} while (::FindNextFile(hFind, &fd));		::FindClose(hFind);	}}

就这么简单,就能实现所要的效果了

 

 

相应的使用样例下载传送门:

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
PHP服务缓存优化
查看>>
k8s 升级与回退
查看>>
Linux-四剑客-find-awk-grep-sed解释----未完结版
查看>>
web前端案例-开发QQ空间相册展示功能
查看>>
牛牛游戏牛型判断算法实现
查看>>
CentOS6.5安装apache 2.4.37
查看>>
体验linux的基本操作
查看>>
服务器虚拟化软件的结构组成和各组件的主要功能与作用
查看>>
XenServer虚拟化服务
查看>>
优酷kux格式视频如何快速转换mp4格式
查看>>
Java中的乱码问题研究(二)
查看>>
Word文档的基础教程
查看>>
你问我答,准备面试需要做哪些技术储备,面试官更加关心什么方面的技术点?...
查看>>
扁平化风格职业规划PPT模板
查看>>
yii2 RESTful api的详细使用
查看>>
ITLOCK勒索病毒删除及数据库恢复
查看>>
被格式化的数据还可以恢复吗?
查看>>
Windows安装使用Eric
查看>>
每周一书《用户故事地图》分享!设计、产品、开发必读!
查看>>
ant
查看>>