100分,关于文件拖动的问题。
我写了一个zip文件的程序,当在我程序里拖动文件到其他目录里的时候。
需要怎么样处理才能象 WinRar 那样,当鼠标抬起后才解压缩文件和复制到目标文件甲。
下面是我的程序 只能先解压缩选择的文件后在拖动。(不然 Explorer就会出现 源文件不存在的提示)
//首先确定有多少文件被选择
UINT s=m_listdlg->m_List.GetSelectedCount();
UINT uBufferSize =10000;// (sizeof(DROPFILES)) * ( s+ 1);
HGLOBAL hMemData = GlobalAlloc( GPTR,uBufferSize);
DROPFILES *lpDropFiles = (LPDROPFILES)GlobalLock(hMemData); //锁定之,并设置相关成员
lpDropFiles->pFiles = sizeof(DROPFILES);
#ifdef _UNICODE
lpDropFiles->fWide = TRUE;
#else
lpDropFiles->fWide = FALSE;
#endif
//下面的代码是解压缩选择的文件 和 添加需要拖动的文件
POSITION i1=m_listdlg->m_List.GetFirstSelectedItemPosition();
m_DownFilePath=m_Work;
m_DownFileName=0;
m_UpFiles.RemoveAll();
m_UpFilesLen=0;
m_mask=0;
m_CancelUpFile=0;
char *pszStart = (char*)((LPBYTE)lpDropFiles + sizeof(DROPFILES));
while (i1!=NULL)
{
int yy=0;
yy=m_listdlg->m_List.GetNextSelectedItem(i1);
CString fn;
fn=m_listdlg->m_List.GetItemText(yy,0);
CString pp;
pp=GetPath();
pp+="\\";
pp+=fn;
CString fi1;
fi1=m_Work;
fi1+="\\";
fi1+=fn;
lstrcpy( pszStart,fi1);
pszStart = strchr(pszStart,'\0') + 1; //下次的起始位置是上一次结尾+1
m_UpFiles.Add(pp);
}
GlobalUnlock( hMemData );
DownFile("",0,0,0,0); //我自己解压缩文件的代码
COlefile source;
source.Empty();
source.CacheGlobalData(CF_HDROP, hMemData);
//source.DelayRenderData(CF_HDROP);
m_bDraging = TRUE; //开始拖动
source.DoDragDrop( DROPEFFECT_COPY );
m_bDraging = FALSE; //完成拖动
请大家帮我解决一下,最好有代码(给全分)。
如果在用户拖动完成后在准备源文件(解压缩)。 如果先准备源文件,也用户取消拖动了,准备的文件就白白浪费了时间与资源。
问题点数:0、回复次数:4Top
1 楼vcleaner(我没当大哥很久了.......)回复于 2005-06-03 13:04:43 得分 0
http://www.codeproject.com/miscctrl/rdragdropfiles.aspTop
2 楼vcleaner(我没当大哥很久了.......)回复于 2005-06-03 13:06:28 得分 0
http://www.codeproject.com/dialog/JibDragDrop.aspTop
3 楼wuchi(风云)回复于 2005-06-03 15:53:12 得分 0
mousedown,mousemove,mouseupTop
4 楼surnde3()回复于 2005-06-03 21:21:32 得分 0
楼上两位好象没有明白我的意思吧!我不是问怎么拖动文件,我是问如何在拖动结束后再提供数据。Top




