OLE对象拖动时,CMDIFrameWnd::OnDropFiles 会被调用?

xiaohanjjj 2009-07-23 04:35:15
我在MDI程序中,设置 主窗口 m_pMainWnd->DragAcceptFiles(); 没有设置 COleDropTarget,
在ChildFrame上 添加了一个 CListView ,我想要把 当前子窗口中的ListView上显示的文件路径拖动到 另外一个子窗口的ListView中。但有时拖到别处,却调用了 CMDIFrameWnd::OnDropFiles ,从而又打开了一个新的ChildFrame。

照理说,两种不同的拖动原理应该不会搅在一起,但是事实确实是被调用了。
有没有人遇到过相同的情况? 谁能给我说明一下,到底怎么一回事?


拖动处理大体如下,拖动的是文件名。
TCHAR* pszBuff = NULL;
HGLOBAL hgDrop = NULL;
DROPFILES* pDrop;
UINT uBuffSize = 0;

uBuffSize += lstrlen (szFilePath) + 1;
uBuffSize = sizeof(DROPFILES) + sizeof(TCHAR) * (uBuffSize + 1);

// 内存分配
hgDrop = GlobalAlloc ( GHND | GMEM_SHARE, uBuffSize );
if ( NULL == hgDrop )
{
return ERR_GENERAL;
}

pDrop = (DROPFILES*) GlobalLock ( hgDrop );
if ( NULL == pDrop )
{
GlobalFree ( hgDrop );
return ERR_GENERAL;
}

// 向内存拷贝文件名
pDrop->pFiles = sizeof(DROPFILES);

pszBuff = (TCHAR*) (LPBYTE(pDrop) + sizeof(DROPFILES));
_tcscpy(pszBuff, szFilePath);
GlobalUnlock ( hgDrop );

m_pDragData->Empty();
m_pDragData->CacheGlobalData(CF_HDROP, hgDrop, NULL);
m_pDragData->DoDragDrop(DROPEFFECT_MOVE);

...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohanjjj 2009-07-23
  • 打赏
  • 举报
回复
禁用MainFrame的drop 当然是可以的,但是我就是想知道,为什么会这样,有没有高手来回答啊?
xwsn007 2009-07-23
  • 打赏
  • 举报
回复
关注,顶一个
oyljerry 2009-07-23
  • 打赏
  • 举报
回复
既然这样,为什么不禁用MainFrame的drop..
xiaohanjjj 2009-07-23
  • 打赏
  • 举报
回复
说详细点,好吗
hurryboylqs 2009-07-23
  • 打赏
  • 举报
回复
你的目标接受这个格式当然就会调用

16,551

社区成员

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

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

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