您的位置:首页 > 运维架构

VC下在对话框上实现接受文件拖放 (Drop files)

2008-02-17 17:51 351 查看
大部分Windows应用工具程序都能响应接受文件拖放,比如Word,Notepad等

当把文件直接拖拽到该窗体或者是某个控件下,应用程序会直接打开这个文件,这样将极大的方便客户使用

本文就是介绍这个的实现,跟以前一样,不看到代码一定会很不爽:

1. 首先先将您的CDialog设置为Accept files,通过代码或者选项点击都可以实现

2. 添加函数声明和消息映射

//添加事件声明(尽量写在"AFX_MSG"宏外面.我记得写在里面会出现错误)

afx_msg void OnDropFiles( HDROP hDropInfo );

//添加消息映射(尽量写在"AFX_MSG_MAP"宏外面.我记得写在里面会出现错误)

ON_WM_DROPFILES()

3. 下一步就是函数的实现

//实现(WINDOWS系统是支持多个文件同时拖放的)

void CMyDlg::OnDropFiles( HDROP hDropInfo )

{

UINT cFiles = ::DragQueryFile( hDropInfo, 0xffffffff, 0, 0); //取得文件数

CString szText;

char szFile[MAX_PATH];

for( UINT count = 0; count < cFiles; count++ )

{

if(cFiles>0)

{

::DragQueryFile(hDropInfo, count, szFile, sizeof(szFile));

szText += szFile; //绝对路径+文件名存于szFile

szText += "/r/n"; //取所有的文件到szText中,一行一个

//break; //只取得第一个文件

}

}

//相应操作

}

ps: 现在这个实现只实现Dialog的拖放操作,未能实现特定控件的拖放操作,但是理论上是可以用这个实现的,因为一般都是CWnd的子类(有些控件不是),那就请读者自己实现一把了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: