如何拖动选项到应用程序中

贪玩的老鼠 2009-04-28 11:22:58
在我的应用程序中,有一个listCtrl控件,保存了一些文件路径和文件类型名.
要实现的功能:我拖动listctrl中的一项,到桌面的快捷方式或着已经运行的程序(程序支持拖曳功能),
程序自动打开当前文件.比如: list控件中,保存了 d:\123.mp3
如果我拖动到桌面的千千静听,就用千千静听打开.
如果拖到暴风,就用暴风播放器打开.
...全文
114 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
贪玩的老鼠 2009-04-30
  • 打赏
  • 举报
回复
谢谢大家的热心帮助!!
自己搞定
重载了一个listCtrl,主要代码
void CMyListCtrl::OnLvnBeginrdrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码

COleDataSource* pSource = new COleDataSource();
//UINT uDropEffect;
DROPFILES dropFiles;
UINT uGblLen,uDropFilesLen;
HGLOBAL hGblFiles,hGblEffect;
char *szData,*szFileList;
//保存文件全路名,目前是固定第一列存放文件名,以后做个回调函数
CString strFilePath=GetItemText(pNMLV->iItem,1); DWORD *dwDropEffect;

//uDropEffect=RegisterClipboardFormat("Preferred DropEffect");
hGblEffect=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
dwDropEffect=(DWORD*)GlobalLock(hGblEffect);
*dwDropEffect=DROPEFFECT_COPY;

GlobalUnlock(hGblEffect);

uDropFilesLen=sizeof(DROPFILES);
dropFiles.pFiles =uDropFilesLen;
dropFiles.pt.x=0;
dropFiles.pt.y=0;
dropFiles.fNC =FALSE;
dropFiles.fWide =TRUE;
UINT uBufLen=strFilePath.GetLength();
uGblLen=uDropFilesLen+uBufLen*2+8;

hGblFiles= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
szData=(char*)GlobalLock(hGblFiles);

memcpy(szData,(LPVOID)(&dropFiles),uDropFilesLen);
szFileList=szData+uDropFilesLen;

MultiByteToWideChar(CP_ACP,MB_COMPOSITE,
strFilePath,uBufLen,(WCHAR *)szFileList,uBufLen);

GlobalUnlock(hGblFiles);

pSource->CacheGlobalData(CF_HDROP, hGblFiles);
pSource->DoDragDrop();
delete pSource;
*pResult = 0;
}
hendric 2009-04-29
  • 打赏
  • 举报
回复
好像有一个什么OleTarget
冷月清晖 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qimiao77 的回复:]
我拖的东西是文件的路径,其他程序当然可以识别的!
[/Quote]

拖拽动作本身不是在List控件中默认实现的。 是通过COleDatasource之类的东西实现的,你可以查下相关资料。
hendric 2009-04-29
  • 打赏
  • 举报
回复
贪玩的老鼠 2009-04-29
  • 打赏
  • 举报
回复
我拖的东西是文件的路径,其他程序当然可以识别的!
冷月清晖 2009-04-29
  • 打赏
  • 举报
回复
你光能支持拖出去没用的,千千静听或暴风也要能识别你拖出去的信息才行,
至于它们是怎么识别的就不知道了。
oyljerry 2009-04-29
  • 打赏
  • 举报
回复
你需要别人的程序能够识别你拖出来的东西..
贪玩的老鼠 2009-04-29
  • 打赏
  • 举报
回复
有没有人知道啊,帮我顶一下
居易锦风 2009-04-28
  • 打赏
  • 举报
回复
网上有很多例子的:
http://www.moon-soft.com/doc/32233.htm
tian_yang_jian 2009-04-28
  • 打赏
  • 举报
回复
顶了
harry330 2009-04-28
  • 打赏
  • 举报
回复
拖出去的话,用COleDatasource的CacheData即可。距离网上搜索下。
贪玩的老鼠 2009-04-28
  • 打赏
  • 举报
回复
我要求的不是讲本地文件拖动到自己的程序打开.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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