Черт. Так ведь и делаю. Вот заделал такой класс:
class MyTarget: public IDropTarget
{
public:
MyTarget(HWND hWnd)
{} ;
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, VOID **ppvObject)
{
if ( riid == IID_IUnknown)
{
AddRef();
*ppvObject = static_cast<IUnknown*>(this);
return S_OK;
}
if (riid == IID_IDropTarget)
{
AddRef();
*ppvObject = static_cast<IDropTarget*>(this);
return S_OK;
}
// unknown interface requested
*ppvObject = NULL; // must set out pointer parameters to NULL
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef (VOID)
{
return 1;
}
virtual ULONG STDMETHODCALLTYPE Release (VOID)
{
return 1;
}
public:
virtual HRESULT STDMETHODCALLTYPE DragEnter (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
{
return NOERROR;
}
virtual HRESULT STDMETHODCALLTYPE DragOver (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
{
return NOERROR;
}
virtual HRESULT STDMETHODCALLTYPE DragLeave (VOID)
{
return NOERROR;
}
virtual HRESULT STDMETHODCALLTYPE Drop (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
{
return NOERROR;
}
protected:
HRESULT STDMETHODCALLTYPE ClearTarget (VOID)
{
return NOERROR;
}
HRESULT STDMETHODCALLTYPE DropEffect (DWORD grfKeyState, DWORD *pdwEffect)
{
return NOERROR;
}
}; // MyTarget
Создал глобальный объект этого класса:
static MyTarget drop_target;
Регистрю для моего нативного окна вот так:
HRESULT hr;
hr = RegisterDragDrop(displayWindow, &drop_target);
hr всегда S_OK
И ничего. Виснет программа когда пытюсь стащить что-то в нативное окно...
((
Ни в одну функцию класса MyTarget кроме AddRef и конструктора не заходит...