关于MFC对话框文件拖拽效果

冰缘666呀 2014-07-24 08:42:17
小弟头一次在CSDN上发帖,实在是碰到棘手问题。
话不多说,直奔主题。
最近在做一个MFC的项目,项目需求是要实现文件拖拽效果,在文件从对话框拖拽到本地的时候要显示图标,文件从本地拖拽到软件接收文件对话框的时候也要显示图标。

其实这个效果跟windows的资源管理器鼠标移动文件夹一样,效果图如下:


从软件内往外拖的效果实现了,其实就是设置一个CImageList变量 把要移动的图标保存下来 跟随鼠标移动,但是从外往里拖的效果没有实现。对话框或者List Control控件设置成Accept File属性之后默认显示的只是个虚框。

卡在这很久了 于是鼓起勇气发一贴求助。
...全文
338 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingtianweichong 2015-09-08
  • 打赏
  • 举报
回复
用com,支持拖放的要实现IDropTarget
冰缘666呀 2014-08-01
  • 打赏
  • 举报
回复
刷下 有解答的么
冰缘666呀 2014-07-29
  • 打赏
  • 举报
回复
fishion 2014-07-24
  • 打赏
  • 举报
回复
用COleDropTarget的OnDragEnter方法处理下看看 http://www.cnblogs.com/henryzc/articles/279801.html 在里面调用下面的方法获取文件的一些信息,用于获取图标之类的 UINT nFileCount = 0; HDROP hDropFiles = NULL; HGLOBAL hMemData = NULL; if(pDataObject->IsDataAvailable(CF_HDROP)) { hMemData = pDataObject->GetGlobalData(CF_HDROP); hDropFiles = (HDROP)GlobalLock((HGLOBAL)hMemData); //锁定内存块 if(hDropFiles != NULL) { char chTemp[_MAX_PATH+1] = {0}; nFileCount = DragQueryFile(hDropFiles, 0xFFFFFFFF, NULL, 0); for(UINT nCur=0; nCur < nFileCount; nCur++) { ZeroMemory(chTemp, _MAX_PATH+1); DragQueryFile(hDropFiles, nCur, (LPTSTR)chTemp, _MAX_PATH+1); } } GlobalUnlock(hMemData); return TRUE; } else { return FALSE; }
凌乱哥 2014-07-24
  • 打赏
  • 举报
回复
凌乱哥 2014-07-24
  • 打赏
  • 举报
回复
我记得这个问题有人发过了,好像是未果
HUSTYZHY 2014-07-24
  • 打赏
  • 举报
回复
同求。。。。。。
冰缘666呀 2014-07-24
  • 打赏
  • 举报
回复
引用 8 楼 fishion 的回复:
[quote=引用 7 楼 u014728666 的回复:] [quote=引用 4 楼 fishion 的回复:] 用COleDropTarget的OnDragEnter方法处理下看看 http://www.cnblogs.com/henryzc/articles/279801.html 在里面调用下面的方法获取文件的一些信息,用于获取图标之类的 UINT nFileCount = 0; HDROP hDropFiles = NULL; HGLOBAL hMemData = NULL; if(pDataObject->IsDataAvailable(CF_HDROP)) { hMemData = pDataObject->GetGlobalData(CF_HDROP); hDropFiles = (HDROP)GlobalLock((HGLOBAL)hMemData); //锁定内存块 if(hDropFiles != NULL) { char chTemp[_MAX_PATH+1] = {0}; nFileCount = DragQueryFile(hDropFiles, 0xFFFFFFFF, NULL, 0); for(UINT nCur=0; nCur < nFileCount; nCur++) { ZeroMemory(chTemp, _MAX_PATH+1); DragQueryFile(hDropFiles, nCur, (LPTSTR)chTemp, _MAX_PATH+1); } } GlobalUnlock(hMemData); return TRUE; } else { return FALSE; }
COLE的话 实现了 CListCtrl在控件内部移动 但是实现不了 向外移动。。还有就是从本地文件夹向控件移动文件 也实现不了[/quote] 往外移动的时候调用SetCapture,往内移动的时候通过OnDropEnter,两种方法都给鼠标添加一个模拟的窗口来展现文件图标可以吧[/quote]但是在往内移动的时候 只是个虚线框 图标不见了。。。。。
fishion 2014-07-24
  • 打赏
  • 举报
回复
引用 7 楼 u014728666 的回复:
[quote=引用 4 楼 fishion 的回复:] 用COleDropTarget的OnDragEnter方法处理下看看 http://www.cnblogs.com/henryzc/articles/279801.html 在里面调用下面的方法获取文件的一些信息,用于获取图标之类的 UINT nFileCount = 0; HDROP hDropFiles = NULL; HGLOBAL hMemData = NULL; if(pDataObject->IsDataAvailable(CF_HDROP)) { hMemData = pDataObject->GetGlobalData(CF_HDROP); hDropFiles = (HDROP)GlobalLock((HGLOBAL)hMemData); //锁定内存块 if(hDropFiles != NULL) { char chTemp[_MAX_PATH+1] = {0}; nFileCount = DragQueryFile(hDropFiles, 0xFFFFFFFF, NULL, 0); for(UINT nCur=0; nCur < nFileCount; nCur++) { ZeroMemory(chTemp, _MAX_PATH+1); DragQueryFile(hDropFiles, nCur, (LPTSTR)chTemp, _MAX_PATH+1); } } GlobalUnlock(hMemData); return TRUE; } else { return FALSE; }
COLE的话 实现了 CListCtrl在控件内部移动 但是实现不了 向外移动。。还有就是从本地文件夹向控件移动文件 也实现不了[/quote] 往外移动的时候调用SetCapture,往内移动的时候通过OnDropEnter,两种方法都给鼠标添加一个模拟的窗口来展现文件图标可以吧
冰缘666呀 2014-07-24
  • 打赏
  • 举报
回复
引用 4 楼 fishion 的回复:
用COleDropTarget的OnDragEnter方法处理下看看 http://www.cnblogs.com/henryzc/articles/279801.html 在里面调用下面的方法获取文件的一些信息,用于获取图标之类的 UINT nFileCount = 0; HDROP hDropFiles = NULL; HGLOBAL hMemData = NULL; if(pDataObject->IsDataAvailable(CF_HDROP)) { hMemData = pDataObject->GetGlobalData(CF_HDROP); hDropFiles = (HDROP)GlobalLock((HGLOBAL)hMemData); //锁定内存块 if(hDropFiles != NULL) { char chTemp[_MAX_PATH+1] = {0}; nFileCount = DragQueryFile(hDropFiles, 0xFFFFFFFF, NULL, 0); for(UINT nCur=0; nCur < nFileCount; nCur++) { ZeroMemory(chTemp, _MAX_PATH+1); DragQueryFile(hDropFiles, nCur, (LPTSTR)chTemp, _MAX_PATH+1); } } GlobalUnlock(hMemData); return TRUE; } else { return FALSE; }
COLE的话 实现了 CListCtrl在控件内部移动 但是实现不了 向外移动。。还有就是从本地文件夹向控件移动文件 也实现不了
冰缘666呀 2014-07-24
  • 打赏
  • 举报
回复
引用 2 楼 dingxz105090 的回复:
我记得这个问题有人发过了,好像是未果
这么回复吧。。。这个不知道怎么实现的
冰缘666呀 2014-07-24
  • 打赏
  • 举报
回复
..汗。。。不知道如何回复消息。@dingxz105090 360网盘实现了这种效果。但是向itool之类的软件 使用的也是accept files这个属性 显示的只是个虚线框。所以 有点难办。
内容概要:本文围绕双侧电源相间短路方向性电流保护的设计与研究展开,结合Simulink仿真平台与详细的理论研究报告,系统阐述了方向性电流保护在复杂电力系统中的工作原理与实现方法。研究重点在于构建适用于双侧电源供电系统的保护逻辑,通过设置方向元件有效区分故障电流流向,确保继电保护装置能够准确、可靠地动作,避免非故障线路误切除。文中详细介绍了保护配置方案、整定计算原则、方向判据选取及Simulink建模过程,涵盖系统建模、故障设置、信号采集、逻辑判断与动作输出等关键环节,验证了所设计保护策略在不同运行方式和故障条件下的有效性与选择性。; 适合人群:电气工程及相关专业的高校学生、从事电力系统继电保护设计与运维的工程技术人员,以及具备一定电力系统基础知识和Simulink仿真能力的科研人员。; 使用场景及目标:①掌握双侧电源系统中相间短路故障的特点及其对保护配置的影响;②学习方向性电流保护的基本原理与实现逻辑;③通过Simulink搭建保护模型,完成仿真验证,提升实际工程问题分析与解决能力;④为毕业设计、科研项目或工程实践提供理论支持和技术参考。; 阅读建议:建议读者结合文中的Simulink仿真模型与报告内容同步学习,重点关注方向判据的选择依据与仿真结果的分析过程,动手复现模型以加深理解,并尝试改变系统参数或故障条件进行对比实验,从而全面掌握方向性保护的核心设计要点。

15,977

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧