WTL拖拽文件
1.对话框属性中把:Accept Files设置为TRUE,或者ModifyStyleEx(0, WS_EX_ACCEPTFILES);
2.在对话框中添加一个ListBox控件,并关联成员变量:m_lstTest;
3.在ListBox属性中同样把:Accept Files设置为TRUE;
4.添加消息响应:
MESSAGE_HANDLER(WM_DROPFILES, OnDropFiles)
LRESULT OnDropFiles(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
5.实现:
LRESULT CMainDlg::OnDropFiles(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
HDROP hDrop = (HDROP)wParam;
wchar_t buf[MAX_PATH] = {0};
int nFileCount = DragQueryFile(hDrop, 0xFFFFFFFF, buf, MAX_PATH);//经检MSDN,0xFFFFFFFF返回托拽文件个数
if(nFileCount > 0)
{
for(int i = 0; i < nFileCount; i++)
{
memset(buf, 0, MAX_PATH);
DragQueryFile(hDrop, i, buf, MAX_PATH);
RECT rtTest;
m_lstTest.GetWindowRect(&rtTest);
POINT pt;
GetCursorPos(&pt);
if(::PtInRect(&rtTest, pt))
{
m_lstTest.AddString(buf);
}
}
}
DragFinish(hDrop);
return 0;
}
在实际工作中还会遇到另一个问题,如果编译选项中UAC选择的是requireAdministrator的话(默认是:asInvoker),WIN7中托拽文件不成功,大概原因是低权限无法向高权限发消息引起的问题.
解决方案是(借用别人方法):
typedef BOOL (WINAPI *_ChangeWindowMessageFilter)( UINT , DWORD);
BOOL AllowMeesageForVista(UINT uMessageID, BOOL bAllow)//注册Vista全局消息
{
BOOL bResult = FALSE;
HMODULE hUserMod = NULL;
//vista and later
hUserMod = LoadLibrary( L"user32.dll" );
if( NULL == hUserMod )
{
return FALSE;
}
_ChangeWindowMessageFilter pChangeWindowMessageFilter = (_ChangeWindowMessageFilter)GetProcAddress( hUserMod, "ChangeWindowMessageFilter" );
if( NULL == pChangeWindowMessageFilter )
{
return FALSE;
}
bResult = pChangeWindowMessageFilter( uMessageID, bAllow ? 1 : 2 );//MSGFLT_ADD: 1, MSGFLT_REMOVE: 2
if( NULL != hUserMod )
{
FreeLibrary( hUserMod );
}
return bResult;
}
在OnInitDialog中加入三句:
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
...
AllowMeesageForVista(WM_DROPFILES, TRUE);
AllowMeesageForVista(WM_COPYDATA, TRUE);
AllowMeesageForVista(0x0049, TRUE);
...
}
WTL拖拽文件的更多相关文章
- window响应拖拽文件操作
window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...
- Unity输出PC端(Windows) 拖拽文件到app中
需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...
- [Java]接受拖拽文件的窗口
至于这个问题,Java的awt.dnd包下提供了许多完成这一功能的类 例如DropTarget.DropTargetListener等 先来讲一下DropTarget类,这个类完成和拖拽.复制文件等操 ...
- 解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件
在Duilib中集成CEF浏览器项目实际开发中,遇到一个问题. 一个需求从资源管理器(桌面)拖拽文件到客户端,窗口捕获WM_DROPFILES消息然后进行消息处理,但客户区是集成的CEF浏览器,浏览器 ...
- atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结
atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...
- vm虚拟机Kali无法拖拽文件解决办法
vm虚拟机Kali无法拖拽文件解决办法 apt-get updateapt-get install open-vm-tools-desktop fusereboot
- html5实现拖拽文件上传
以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...
- html5 拖拽文件到页面实现上传
思路:监听拖拽区域的 drop 事件,阻止浏览器上的默认拖拽事件 参考:http://www.helloweba.com/view-blog-192.html 例子: <!DOCTYPE htm ...
- 关于安装了VMware tools后仍然不支持拖拽文件的问题
我在学校机房里面的redhat4上面安装了VMware tools之后能正常支持拖拽,但是我自己电脑上的却不支持,折腾了好久,网上找了很久也还是没有解决,不过发现了一些问题,总结如下:(当然我总结的这 ...
随机推荐
- (5.2)mysql高可用系列——测试环境部署
关键词环境部署: ############## 测试环境机器架构 #########[1]策划[1.1]linux服务器A组 8台 192.168.1.200~192.168.1.207,主机名db, ...
- Excel透视表进阶之排序、筛选、分组、总计与分类汇总
排序 自动排序 升序: 数字(从小到大) 日期(日期越早越靠小) 英文(按照A-Z) 中文(按照拼音的A-Z) 手动排序 通过鼠标的拖拽来完成手动排序 通过快捷菜单的方式:右击-移动 依据其他字段进行 ...
- MARKDOWN使用文档
ISSUE引用 引用当前项目内的ISSUE #1 markdown写法 #1 引用当前命名空间下的其他项目内的ISSUE projectname#1 sofa_ta#1 markdown写法 sofa ...
- 公共子序列_NOI导刊2011提高(03)题
题面 这道题有点坑人啊~ 首先,它需要取模,模数是100000000:(窝在这里死了好久好久,看了别人的代码才发现这一点) 然后我发现题解中没有序列自动机的方法,于是就来一发 首先,虽然序列自动机在定 ...
- Laravel 程序优化
转载: Laravel 程序优化 说明 作为优秀的开发者,在日常编码中,应积极培养书写高执行效率代码的意识.不过项目运行效率是一个系统性工程,不应该只停留在代码层面上,有时更应该考虑整个项目架构,包括 ...
- tomcat部署项目时 报错Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules 解决方法: 找到文件 .set ...
- 吴恩达深度学习:2.12向量化logistic回归
1.不使用任何for循环用梯度下降实现整个训练集的一步迭代. (0)我们已经讨论过向量化如何显著加速代码,在这次视频中我们会设计向量化是如何实现logistic回归,这样酒桶同时处理m个训练集,来实现 ...
- vue与react对比
相同点 1.都使用 virtual DOM 2.都是组件化开发 or 都提供了组件化的视图组件 3.数据的改变会引起视图的二次渲染 4.都只有骨架,其他的功能如路由.状态管理等是框架分离的组件. 5. ...
- urlencode编/解码
from urllib.parse import urlencode, quote, unquote # urlencode方法参数是字典 body = { "content": ...
- python redis之连接池的原理
python redis之连接池的原理 转载地址 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下 ...