IdropTarget接口releaseStgMedium老出错
我继承IDROPTARGET接口,实现了一个CDropTarget类,以支持URL的拖放,当在程序外部用IE进行拖放时,没有什么问题,但我在程序里面做了一个CHtmlDlg,里面navigate一个网址,再拖放,老是会在ReleaseStgMedium时,跳出一个“用户断点”错误,将其注掉,就会发现,鼠标还未释放时,就触发了Drop事件,百思不得其解,请各位大牛帮助解答,谢谢!
STDMETHODIMP CDropTarget::DragEnter(LPDATAOBJECT pIDataSource,
DWORD grfKeyState, POINTL ptl, LPDWORD pdwEffect)
{
POINT pt;
pt.x = ptl.x;
pt.y = ptl.y;
::ScreenToClient (m_pHostWindow->GetSafeHwnd(), &pt);
m_pIDataSource = pIDataSource ;
m_pIDataSource->AddRef( ) ;
TCHAR *strText;
std::string url;
if (m_pIDataSource)
{
STGMEDIUM stg ; FORMATETC fe ;
fe.cfFormat = CF_TEXT ;
fe.ptd = NULL ;
fe.tymed = TYMED_HGLOBAL ;
fe.dwAspect = DVASPECT_CONTENT ;
fe.lindex = -1 ;
if (S_OK == (m_pIDataSource->QueryGetData(&fe)))
{
m_pIDataSource->GetData (&fe, &stg) ;
strText = (TCHAR*)GlobalLock(stg.hGlobal);
url = strText;
m_pHostWindow->OnDragFile(url.c_str(),pt);
GlobalUnlock(stg.hGlobal);
GlobalFree(stg.hGlobal);
}
ReleaseStgMedium (&stg) ; //在这里出现“用户断点”错误
m_pIDataSource->Release();
m_pIDataSource = NULL;
}
return S_OK ;
}
STDMETHODIMP CDropTarget::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,POINTL ptl, LPDWORD pdwEffect)
{
::PostMessageA(mainwnd,WM_LBUTTONUP,NULL,NULL); //用外部浏览器拖放时没问题,用htmldialog拖放时鼠标左键还未释放就进来了,很奇怪!
}