16,472
社区成员
发帖
与我相关
我的任务
分享
class CMyDropTarget : public IDropTarget
{
public:
virtual ULONG AddRef() { return 1; }
virtual ULONG Release() { return 1; }
virtual HRESULT QueryInterface(REFIID iid, void** ppvObject)
{
if (iid==IID_IUnknown || iid==IID_IDropTarget)
{
*ppvObject = this;
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHOD(DragEnter)(IDataObject *, DWORD, POINTL, DWORD * pdwEffect)
{
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
STDMETHOD(DragOver)(DWORD, POINTL, DWORD * pdwEffect)
{
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
STDMETHOD(DragLeave)()
{
return S_OK;
}
STDMETHOD(Drop)(IDataObject *, DWORD, POINTL, DWORD * pdwEffect)
{
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
};
class CMyDialog : public CDHtmlDialog // 这是你的对话框类
{
...
public:
CMyDropTarget m_droptarget; // 添加这个成员变量
STDMETHOD(GetDropTarget)(IDropTarget *pDropTarget, IDropTarget **ppDropTarget) // 重载这个虚函数
{
*ppDropTarget = (IDropTarget*)&m_droptarget;
return S_OK;
}
HRESULT DragEnter(IDataObject *, DWORD, POINTL, DWORD * pdwEffect)
{
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
STDMETHOD(GetDropTarget)(
IDropTarget *pDropTarget,
IDropTarget **ppDropTarget
)
{
*ppDropTarget = (IDropTarget*)this;
return S_OK; // 你之前返回E_NOTIMPL,将导致你的IDropTarget接口在首次被调用后不再调用,因为以后调用默认实现了
}