求助OnDropFiles问题

alzq_zf 2008-12-29 09:09:24
在一个主程序框架内
使用COleDataSource对象实现文件的拖拽操作,从框架拖放到资源管理器等都正常,但是从框架内的控件A拖放到控件B时,控件B正常触发OnDropFiles事件
但是,当鼠标移动回控件A时,控件A又重复触发了一次OnDropFiles事件

在控件A,控件B中的OnDropFiles函数中都有::DragFinish(hDrop);函数,请问大虾们……为虾米会这样

控件A中拖拽操作函数如下:


DROPEFFECT DropResult=DROPEFFECT_NONE; //操作结果
iLen=iLen+sizeof(DROPFILES) +1;

//分配全局内存,准备拖放之用,注意此块内存将由接收拖放的窗口负责销毁
HGLOBAL hMemData = GlobalAlloc(GPTR,iLen);
if(!hMemData)
{
return ;
}

//锁定分配的内存,并设置相关成员
LPDROPFILES lpDropFiles = (LPDROPFILES)GlobalLock(hMemData);
if(!lpDropFiles)
{
return ;
}

lpDropFiles->pFiles = sizeof(DROPFILES);
#ifdef _UNICODE
lpDropFiles->fWide = TRUE;
#else
lpDropFiles->fWide = FALSE;
#endif

//把选中的所有文件名依次复制到DROPFILES结构体后面(全局内存中)
POSITION pItemPos = stringList.GetHeadPosition();
char * pszStart = (char*)((LPBYTE)lpDropFiles + sizeof(DROPFILES));
while(pItemPos != NULL)
{
lstrcpy(pszStart, stringList.GetNext(pItemPos));
pszStart = strchr(pszStart,'\0') + 1; //下次的起始位置是上一次结尾+1
}

m_DragSource.Empty();
m_DragSource.CacheGlobalData(CF_HDROP,hMemData);
DropResult=m_DragSource.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_MOVE);

GlobalUnlock(hMemData);


控件B中响应函数如下:

char szFilePathName[_MAX_PATH+1] = {0};
//得到文件个数
UINT nFileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
for (UINT nIndex=0 ; nIndex< nFileCount; nIndex++)
{
//得到文件名
DragQueryFile(hDrop, nIndex, szFilePathName, _MAX_PATH);
//获得文件名,不包含路径
}
::DragFinish(hDrop);
...全文
260 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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