wtl 支持托拽文件并在ListBox框中显示文件路径的方法
来源:互联网 发布:h5 吊起淘宝app 编辑:程序博客网 时间:2024/05/16 01:38
1.对话框属性中把:Accept Files设置为TRUE;
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 支持托拽文件并在ListBox框中显示文件路径的方法
- C#中让ListBox支持文件路径的拖放
- 选择文件并在编辑框中显示文件路径
- 让listBox支持拖放入文件的路径
- C# 批量导入帐号文件并使其按序排列显示在listbox中
- MFC选择文件并在编辑框中显示文件路径
- 支持文件拖放的ListBox
- WTL分列显示的ListBox
- WTL分列显示的ListBox
- 通过托放文件到TextBox,在其中显示文件名称的方法
- WTL中GDI+支持资源文件加载
- 资源文件的创建使用,选择listbox中图片名称,在picture中显示图片
- 在Mac中显示文件路径
- 如何打开文件对话框并将选择的文件显示在编辑框中?
- 在js文件中获取本js的路径方法
- 如何简单的下载一些小文件并保存在一个路径中(有些方法进行了封装)
- 向表单拖放文件,文件路径及名称显示到列表框中(更简单的方法)
- WTL头文件中包含的类
- POJ 1442 Black Box
- 时针分针秒针一天到底重合几次
- 【教你关闭有损Win7硬盘的系统服务】
- zoj 1508 Intervals 差分约束系统
- WinForm进度条
- wtl 支持托拽文件并在ListBox框中显示文件路径的方法
- android paint类方法解析
- Android数据存储(三)——SQLite
- opencv 使较暗的物体变亮
- 如何简单安装NumPy与SciPy(以Windows下为例)
- oracle 事务原子性
- smarty学习笔记一
- hdu 1162 Eddy's picture
- cocos2d-x整合/嵌入Winform子窗体