win32使用拖放文件
于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);
}
}
就这么简单,就能实现所要的效果了
相应的使用样例下载传送门:
http://download.csdn.net/detail/zengraoli/7864689
版权声明:本文博主原创文章。博客,未经同意不得转载。
win32使用拖放文件的更多相关文章
- WIN32读写INI文件方法
在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...
- QT实现拖放文件(有例子,并且图文并茂,非常清楚)
转自:http://my.oschina.net/voler/blog/345722 目录[-] 0. 源代码下载地址 1. 简单文件拖放 2. 复杂文件拖放 3. 通过按钮来完成列表数据的转移 4. ...
- Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)
场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
- Filezilla Xshell SecureFX Win10等无法拖放文件(本地或线上)解决办法
一.win10系统Filezilla Xshell SecureFX等无法拖放文件到线上服务器解决办法: 1.按窗口键+R,打开“运行”对话框:输入regedit回车 2.在注册表编辑器地址栏输入以下 ...
- WPF + Winform 解决管理员权限下无法拖放文件的问题
wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...
- WPF - 使用Microsoft.Win32.OpenFileDialog打开文件,使用Microsoft.Win32.SaveFileDialog将文件另存
1. WPF 使用这个方法打开文件,很方便,而且可以记住上次打开的路径. Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.W ...
- 扩展WebBrowser控件,使其支持拖放文件
public partial class UserControl1 : WebBrowser { private const int WmDropfiles = 0x233; [DllImport(& ...
- Win32:引用头文件
1.首先,在代码文件头部使用#include来包含任何头文件(扩展名为.h或者.hpp的文件)都不会“产生”额外的函数. 我们可以说,包含一个头文件之后,该头文件内部已经定义的一些变量,宏,函数等等资 ...
- h5-20-文件操作-拖放文件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- properties editor for eclipse安装使用
properties editor 是 Eclipse下编辑properties文件的插件,用来写国际化程序非常方便,自动保存为ASCII码,支持Unicode. 安装过程: 打开eclispe编辑器 ...
- Trie图和Fail树
Trie图和AC自动机的区别 Trie图是AC自动机的确定化形式,即把每个结点不存在字符的next指针都补全了.这样做的好处是使得构造fail指针时不需要next指针为空而需要不断回溯. 比如构造ne ...
- ecshop 调用其他数据库中的商品
ecshop中修改includes/cls_ecshop.php中第53行 function table($str) { /* if($str=='goods'){ return '`ecshop3' ...
- 【spring源代码分析】--Bean的解析与注冊
接着上一节继续分析,DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法: protected void parseBeanDefini ...
- sscanf,sscanf_s及其相关使用方法
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscan ...
- POJ 36666 Making the Grade 简单DP
题意是: 给出n个数,让你用最小的花费将其改成非递增或非递减的 然后花费就是新序列与原序列各个位置的数的差的绝对值的和 然后可以看到有2000个数,数的范围是10亿 仔细观察可以想象到.其实改变序列中 ...
- (hdu 7.1.8)Quoit Design(最低点——在n一个点,发现两点之间的最小距离)
主题: Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 新浪微博。。openapi 分享 图画+ 写作
新浪微博困难啊 .. . .. .郁闷死了. .在此记录它 1.使用界面:https://api.weibo.com/2/statuses/upload_url_text.json 能够申请,.高级权 ...
- swift笔记 (三) —— 字符和字符串
字符串和字符 苹果要是不提供了unicode的字符串和字符,那就是他们公司全部人的脑袋都被门夹过 他自己家都要发非常多国家的版本号的软件,怎么可能不用unicode呢 此处略去30字... 这里能够拿 ...
- js如果你想删除您问
if (confirm("OK删除?") == true)