OLE对象拖动时,CMDIFrameWnd::OnDropFiles 会被调用?
我在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);