加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC支持文件拖拽功能函数:DragAcceptFiles,DragQueryFile和DragFinish

(2015-12-18 18:06:42)
标签:

vc

拖拽文件

dragacceptfiles

dragqueryfile

dragfinish

分类: 代码天地

一  VC支持文件拖拽功能的三个函数:DragAcceptFiles,DragQueryFile和DragFinish。

1.DragAcceptFiles 确定窗口是否接收文件拖拽。

void DragAcceptFiles(HWND hWnd,BOOL fAccept);

hWnd:接收文件拖拽功能的窗口句柄。
fAccept:为TRUE则接收文件拖拽,为FALSE不再接收。

对话框,可以右击--Properties->Extended Styles,勾选Accept files,从而加上  EXSTYLE WS_EX_ACCEPTFILES 。


2.DragQueryFile 获得拖拽后的文件名称列表。

UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT nLen);

hDrop:HDROP标识符,即系统响应函数WindowProc中的wParam参数
iFile:从0开始的文件索引号。如果该参数为0xFFFFFFFF,则返回拖拽的文件个数。
lpszFile:用于存放文件名的缓冲区地址
nLen:缓冲区长度

函数返回值:若iFile为0xFFFFFFFF返回拖拽的文件个数,否则返回相应索引号的文件名长度。


3. DragFinish 释放系统为拖拽功能处理文件名称而分配的内存。

void DragFinish(HDROP hDrop);


二  在对话框中,简单地类向导为其加入WindowProc即可实现

LRESULT CDragFileDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
switch (message)
{
case WM_CREATE:
//1 文件拖拽 允许,可放在初始化中
DragAcceptFiles(TRUE);
return 0;
//2 文件拖拽个数,对应的文件名
case WM_DROPFILES:
HDROP hDrop = (HDROP)wParam;
//2.1 参数0xFFFFFFFF ,将获得拖拽文件个数
UINT nFileNum = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); 
char strFileName[MAX_PATH];
for (int i = 0; i < nFileNum; i++)  
{
//2.2 参数 i ,将获得拖拽的第i个文件名
DragQueryFile(hDrop, i, strFileName, MAX_PATH);

//a 可将获得的文件名称,放入ListBox中
m_listbox.AddString(strFileName);

//b 也可将获得的文件名称,放入vector中
vetFileNames.push_back(strFileName); 

}
m_listbox.UpdateWindow();//刷新ListBox
//3 释放拖拽的hDrop
DragFinish(hDrop);   
return 0;
}
return CDialog::WindowProc(message, wParam, lParam);
}


三  对于vector 方式储存文件名称的还需要

1 需要的头文件
#include 《vector》
#include 《cstring》
using namespace std;
vector《string》 vetFileNames; 


2 在需要的地方,弹出需要的文件名称

CString str;
vector《string》::iterator pos;
//在需要的地方,显示拖拽的文件名
for (pos = vetFileNames.begin(); pos != vetFileNames.end(); pos++)
{
 str=pos->c_str();
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有