// shell32.dll version 6.0 or later
static HRESULT Emulate_SHDoDragDrop(HWND hwnd, IDataObject pdtobj, IDropSource pdsrc, DWORD dwEffect, DWORD pdwEffect)
{
HRESULT hr = S_OK;
IDragSourceHelperPtr spDragSourceHelper;
hr = spDragSourceHelper.CreateInstance(CLSID_DragDropHelper);
if (FAILED(hr))
{
そのまま処理を続行する
→ Win2k以外ではサポートされていない
}
IDragSourceHelperがあれば使用する
if (spDragSourceHelper)
{
POINT pt = {0, 0};
GetCursorPos(&pt);
ScreenToClient(hwnd, &pt);
hr = spDragSourceHelper-InitializeFromWindow(hwnd, &pt, pdtobj);
if (FAILED(hr))
{
無視する。。
}
}
return DoDragDrop(pdtobj, pdsrc, dwEffect, pdwEffect);
}