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

本文共 1896 字,大约阅读时间需要 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);	}}

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

 

 

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

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

转载于:https://www.cnblogs.com/blfshiye/p/4776167.html

你可能感兴趣的文章
JQuery 事件
查看>>
main(argc,argv[])
查看>>
在线教育工具—白板系统的迭代1——bug监控排查
查看>>
121. Best Time to Buy and Sell Stock
查看>>
hdu 1005 根据递推公式构造矩阵 ( 矩阵快速幂)
查看>>
安装php扩展
查看>>
百度移动搜索主要有如下几类结果构成
查看>>
Python爬虫面试题170道:2019版【1】
查看>>
JavaBean规范
查看>>
第四阶段 15_Linux tomcat安装与配置
查看>>
NAS 创建大文件
查看>>
学习笔记-模块之xml文件处理
查看>>
接口测试用例
查看>>
面试:用 Java 实现一个 Singleton 模式
查看>>
Sybase IQ导出文件的几种方式
查看>>
案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变...
查看>>
linux 系统下 tar 的压缩与解压缩命令
查看>>
阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
查看>>
转:How to force a wordbreaker to be used in Sharepoint Search
查看>>
MySQL存储过程定时任务
查看>>