社区
ATL
帖子详情
如何将程序中的内容“拖”到桌面或文件夹中(DoDragDrop高难度高分问题)
chenybin
2007-01-30 11:30:22
实现拖出,
现在程序的“拖”数据源是Listview,具体的内容根据Listview选中的文件从ftp下载(这个无所谓,反正从其他地方来的,数据库的stream等等都可以,不同于普通文本拖放),希望拖放完毕,鼠标放开以后开始下载ftp的内容,并保存到本地,
(从程序窗口中的listview拖到桌面等地方)
...全文
1146
42
打赏
收藏
如何将程序中的内容“拖”到桌面或文件夹中(DoDragDrop高难度高分问题)
实现拖出, 现在程序的“拖”数据源是Listview,具体的内容根据Listview选中的文件从ftp下载(这个无所谓,反正从其他地方来的,数据库的stream等等都可以,不同于普通文本拖放),希望拖放完毕,鼠标放开以后开始下载ftp的内容,并保存到本地, (从程序窗口中的listview拖到桌面等地方)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
42 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
freethy
2009-08-25
打赏
举报
回复
呼呼
这么多兄弟这么早都讨论过该问题了咯。。。。
我今天还刚刚用到
楼主 解决了没?
chenybin
2008-03-06
打赏
举报
回复
继续迷茫中,主要还是想在Delphi中实现
chenybin
2007-10-16
打赏
举报
回复
to codewarrior :
非常感谢,这些文章已经看了很多次了,拖出去内容,如果本地不存在,确实有那么点难度,如果能借鉴rar的方式也可以,不过现在没搞定
chenybin
2007-10-16
打赏
举报
回复
用SetCapture好像比较复杂吧
Lord Li
2007-10-16
打赏
举报
回复
群上来接分的。
会思考的草
2007-07-31
打赏
举报
回复
看我的blog吧,这个拖放很容易的。
http://blog.csdn.net/codewarrior/archive/2004/06/15/12039.aspx
http://blog.csdn.net/codewarrior/archive/2004/06/15/12040.aspx
http://blog.csdn.net/codewarrior/archive/2004/06/15/12041.aspx
mynamelj
2007-07-31
打赏
举报
回复
自已处理吧,用SetCapture,然后用WindowFromPoint判断是桌面还是文件夹,再获取路径
littlegang
2007-07-31
打赏
举报
回复
TO chenybin
COleDataSource 有延迟的方法,在codeproject有示例代码
==================
指哪个链接?你看的是
http://www.codeproject.com/shell/dropsourcehelpermfc.asp ?
sxcong
2007-07-31
打赏
举报
回复
不能用API,那样整个系统都被占用了,其他什么都干不成.
wshcdr
2007-07-28
打赏
举报
回复
谢谢楼上的兄弟
COleDataSource 有延迟的方法,在codeproject有示例代码,但是现在要在其他语言,比如delphi和vb里面实现,所以最好用api的方式,没看懂mfc的原理,谢谢
//////////////////////
用VC做COM dll
在Delphi或者VB中调用这个dll好了
chenybin
2007-06-23
打赏
举报
回复
没有解决,郁闷了
whiteclouds
2007-06-13
打赏
举报
回复
楼主,问题解决没有?我也正在做这方面东西,交流一下?
chenybin
2007-03-28
打赏
举报
回复
没找到,看了大半天了
kimryo
2007-03-28
打赏
举报
回复
改成用API应该不难吧,把MFC类的方法改成API调用就行了~。。。
chenybin
2007-03-28
打赏
举报
回复
谢谢楼上的兄弟
COleDataSource 有延迟的方法,在codeproject有示例代码,但是现在要在其他语言,比如delphi和vb里面实现,所以最好用api的方式,没看懂mfc的原理,谢谢
kimryo
2007-03-25
打赏
举报
回复
COleDataSource m_DragSource;
kimryo
2007-03-25
打赏
举报
回复
void CFileListCtrl::OnDrop(COleDataObject *pDataObj,BOOL* pbRet)
{
CWaitCursor Cursor;
CWnd* pWnd=GetParent();
if(pWnd==NULL)
return;
pWnd->KillTimer(2);
*pbRet=FALSE;
SetMiscFlag(MISC_DRAGGING,FALSE);
if(ReadMiscFlag(MISC_SELFDRAG)&&GetSelectedCount()==0){
SetMiscFlag(MISC_SELFDRAG,FALSE);
return;
}
SetMiscFlag(MISC_SELFDRAG,FALSE);
if(m_pidlfItem==NULL)
return;
TCHAR szDst[MAX_PATH],szCurAddr[MAX_PATH];
SHGetPathFromIDList(m_pidlfItem,szCurAddr);
if(GetSelectedCount()==1)
GetSelItemPath(szDst);
else
_tcscpy(szDst,szCurAddr);
CStringArray FileArray;
FileArray.RemoveAll();
BOOL bMove=IsStatekeyPressed(VK_SHIFT),bCtrl=IsStatekeyPressed(VK_CONTROL);
CMyOleDragDrop::GetFileData(pDataObj,FileArray);
if(bMove&&bCtrl){
for(int i=0;i<FileArray.GetSize();i++)
AddFileLinkItem(FileArray.GetAt(i),szDst,szCurAddr);
}else{
if(FileArray.GetSize()>0)
CopyFileItem(FileArray,szDst,szCurAddr,bMove);
}
FileArray.RemoveAll();
*pbRet=TRUE;
}
kimryo
2007-03-25
打赏
举报
回复
void CFileListCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if(GetSelectedCount()>0){
int iSels=GetSelectedCount(),iLen;
LPTSTR pszFiles=new TCHAR[MAX_PATH*iSels];
if(pszFiles==NULL)
return;
GetSelItemPaths(pszFiles,&iLen);
DROPFILES df;
ZeroMemory(&df,sizeof(DROPFILES));
df.fWide=FALSE;
df.pFiles=sizeof(DROPFILES);
HGLOBAL hGlobal=GlobalAlloc(GMEM_FIXED,iLen+sizeof(DROPFILES));
memcpy(hGlobal,&df,sizeof(DROPFILES));
memcpy(((LPBYTE)hGlobal+sizeof(DROPFILES)),pszFiles,iLen);
delete[] pszFiles;
m_DragSource.CacheGlobalData(CF_HDROP,hGlobal);
SetMiscFlag(MISC_SELFDRAG);
SetMiscFlag(MISC_DRAGGING);
DROPEFFECT rdf=m_DragSource.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_MOVE|DROPEFFECT_LINK|DROPEFFECT_SCROLL);
CheckSelAvailable();
m_DragSource.Empty();
SetMiscFlag(MISC_DRAGGING,FALSE);
}
*pResult = 1;
}
kimryo
2007-03-25
打赏
举报
回复
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if(GetSelectedCount()>0){
int iSels=GetSelectedCount(),iLen;
LPTSTR pszFiles=new TCHAR[MAX_PATH*iSels];
if(pszFiles==NULL)
return;
GetSelItemPaths(pszFiles,&iLen);
DROPFILES df;
ZeroMemory(&df,sizeof(DROPFILES));
df.fWide=FALSE;
df.pFiles=sizeof(DROPFILES);
HGLOBAL hGlobal=GlobalAlloc(GMEM_FIXED,iLen+sizeof(DROPFILES));
memcpy(hGlobal,&df,sizeof(DROPFILES));
memcpy(((LPBYTE)hGlobal+sizeof(DROPFILES)),pszFiles,iLen);
delete[] pszFiles;
m_DragSource.CacheGlobalData(CF_HDROP,hGlobal);
SetMiscFlag(MISC_SELFDRAG);
SetMiscFlag(MISC_DRAGGING);
DROPEFFECT rdf=m_DragSource.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_MOVE|DROPEFFECT_LINK|DROPEFFECT_SCROLL);
CheckSelAvailable();
m_DragSource.Empty();
SetMiscFlag(MISC_DRAGGING,FALSE);
}
*pResult = 1;
littlegang
2007-03-25
打赏
举报
回复
winrar 可能是先建立临时文件夹,
那么拖放时可以提供一个对应的文件名
加载更多回复(22)
Do
Drag
Drop
用法
Do
Drag
Drop
使用方法,用于开始对象的
拖
放操作
asp.net Do
Drag
Drop
方法的使用
在类库
中
的定义为: 代码如下: [UIPermissionAttribute(SecurityAction.Demand, Clipboard = UIPermissionClipboard.OwnClipboard)] public
Drag
Drop
Effects Do
Drag
Drop
( Object data,
Drag
Drop
Effects ...
drag
and
drop
用qt实现
拖
拽行为。是c++ gui programming with qt 4 第9章的第一个例子。
WinForm
拖
拽控件生成副本的解决方法
本文讲述了WinForm
中
实现
拖
拽效果的功能,即在WinForm
中
有一个Button,可以实现
拖
拽这个Button到目标位置后生成一个该控件的副本的功能。具体操作步骤如下: 要实现该功能主要分成如下三步: 1)确定被
拖
拽的对象:...
C# ListView 支持分组时
拖
拉排序的控件
this.Do
Drag
Drop
(e.Item,
Drag
Drop
Effects.Move); } void
Drag
ItemListView_
Drag
Enter(object sender,
Drag
EventArgs e) { e.Effect = e.AllowedEffect; } private class ListViewIndexComparer : System....
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章