0

I need help to create an IDataObject to enable drag and drop of these 2 Items (Run and Help) For Example I need to do just like Windows Startmenu does.

to run them I use these

CComPtr<IShellDispatch2> pShellDisp;
if (SUCCEEDED(CoCreateInstance(CLSID_Shell,NULL,CLSCTX_SERVER,IID_IShellDispatch2,(void**)&pShellDisp)))
{
    pShellDisp->Help();    //Help
    pShellDisp->FileRun(); //Run
}

Can you guys help me out ?

PS: I need the drag with image Icons too

EDIT [SOLVED]

IShellFolder* desk = NULL;
                HRESULT hr =SHGetDesktopFolder(&desk);
                LPITEMIDLIST pidl2=NULL;
                ULONG cbEaten;
                DWORD dwAttribs = 0 ;

                hr = desk->ParseDisplayName(NULL,
                                             NULL,
                                             L"shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}",
                                             &cbEaten,  // This can be NULL
                                             &pidl2,
                                             &dwAttribs);
                hr = desk->GetUIObjectOf(parentHwnd, 1,
                        (PCITEMID_CHILD*)&pidl2, IID_IDataObject, 0, (LPVOID *)lpdataObj);

                desk->Release();
                return;

for run:

shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0} 
4

1 に答える 1

0

その場合、任意の時点でデータオブジェクトにこれらのアイテムの1つだけが必要であると想定します。

同じ操作で両方のアイテムをドラッグアンドドロップしたい場合は、物事が難しくなります。それらのオブジェクトの両方が同じ親を持っているかどうかはわかりません。もしそうなら、古いCIDLData_CreateFromIDArrayでさえそれを処理することができます。そうでない場合は、SHCreateShellItemArrayFromIDListsを試してから、を使用できますIShellItemArray::BindToHandler(...,BHID_DataObject,...)。<Vistaをサポートするには、独自のCFSTR_SHELLIDLISTを作成し、それをデータオブジェクトに追加する必要があると思います。

ドラッグ画像は実際にはこれに関連していないため、IDragSourceHelperなどに関する情報を含める別の質問で尋ねる必要があります。

于 2012-05-16T22:04:41.860 に答える