于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使用拖放文件的更多相关文章

  1. WIN32读写INI文件方法

      在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...

  2. QT实现拖放文件(有例子,并且图文并茂,非常清楚)

    转自:http://my.oschina.net/voler/blog/345722 目录[-] 0. 源代码下载地址 1. 简单文件拖放 2. 复杂文件拖放 3. 通过按钮来完成列表数据的转移 4. ...

  3. Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)

    场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

  4. Filezilla Xshell SecureFX Win10等无法拖放文件(本地或线上)解决办法

    一.win10系统Filezilla Xshell SecureFX等无法拖放文件到线上服务器解决办法: 1.按窗口键+R,打开“运行”对话框:输入regedit回车 2.在注册表编辑器地址栏输入以下 ...

  5. WPF + Winform 解决管理员权限下无法拖放文件的问题

    wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...

  6. WPF - 使用Microsoft.Win32.OpenFileDialog打开文件,使用Microsoft.Win32.SaveFileDialog将文件另存

    1. WPF 使用这个方法打开文件,很方便,而且可以记住上次打开的路径. Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.W ...

  7. 扩展WebBrowser控件,使其支持拖放文件

    public partial class UserControl1 : WebBrowser { private const int WmDropfiles = 0x233; [DllImport(& ...

  8. Win32:引用头文件

    1.首先,在代码文件头部使用#include来包含任何头文件(扩展名为.h或者.hpp的文件)都不会“产生”额外的函数. 我们可以说,包含一个头文件之后,该头文件内部已经定义的一些变量,宏,函数等等资 ...

  9. h5-20-文件操作-拖放文件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. [WPF] 使用Grid与GridSplitter排版布局

    原文:[WPF] 使用Grid与GridSplitter排版布局 前言 在開發應用程式時,一個很重要的工作項目就是設計使用者介面的排版布局.WPF中所提供的Grid控制項,讓開發人員擁有將版面分割為欄 ...

  2. C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象

    重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt { int operator() (int v ...

  3. SSH是什么?Linux如何修改SSH端口号?

    通过SSH连接可以远程管理Linux等设备,默认linuxssh端口是22端口,如何修改SSH默认端口,如何增加SSH端口呢?,下面小编给大家演示一下   工具/原料 Xshell   putty 等 ...

  4. 促销R语言应用性能

    1.       绩效评估 时间的确定 R测量时间是在最简单的方式提供是system.time性能. system.time(expr, gcFirst=TRUE) 这个函数会在不减少程序执行性能的情 ...

  5. android 设置默认启动network mode

    network mode常见类型 WCDMA preferred : 0 GSM only : 1 WCDMA only : 2 GSM UMTS : 3 CDMA : 4 ... (参考RILCon ...

  6. easyui DateTimeBox OK

    一.datetimebox   ok按钮没有点击事件,但是可以通过onSelect事件模拟出“点击了ok按钮一样的效果”,我的代码: 关键: 0,理解DateTimeBox控件,这个控件是由DateB ...

  7. div 浮动框

  8. .net机试题总结

    1.下面是一个由*号组成的4行倒三角形图案.要求:1.输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”:2.在屏幕上打印这个指定了行数的倒三角形. ******* ...

  9. Mono for Android开发调研笔记

    安装完Mono for Android(简称:MonoDroid)之后,可以用MonoDevelop或Visual Studio来开发Mono for Android应用程序:目前只能在模拟器上调试和 ...

  10. Linux 没有 my.cnf 解决方案文件完全我自己的整个教程很多口才

    我看过好多关于Linux下没有my.cnf的博客,都是什么rmp安装没有my.cnf文件啊,然后什么两个方法啊,我就无语了,大家要是知道就不会查资料了,你们敢不敢负责点?说具体点?有的说从 /usr/ ...