掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IEからリンクのドロップを受け取るには? (ID:64908)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
具体的コード例について記させて頂きます。 IDropTargetの実装についてですが、 http://hp.vector.co.jp/authors/VA016117/oledragdrop1.html このサイトのサンプルを元にして作成させていただきました。 #include <windows.h> #include <objbase.h> #include "dropTarget.h" HRESULT __stdcall dropTarget::QueryInterface(const IID& iid, void** ppv) { HRESULT hr; if(iid == IID_IDropTarget || iid == IID_IUnknown){ hr = S_OK; *ppv = (IDropTarget*)this; AddRef(); }else{ MessageBox(NULL, "知らないインターフェイスを要求されたよ?", "あうぅ", MB_OK) ; hr = E_NOINTERFACE; *ppv = 0; } return hr; } ULONG __stdcall dropTarget::AddRef() { InterlockedIncrement(&_RefCount); return (ULONG)_RefCount; } ULONG __stdcall dropTarget::Release() { ULONG ret = (ULONG)InterlockedDecrement(&_RefCount); if(ret == 0){ // このクラスを作成する時はnewを使うこと delete this; } return (ULONG)_RefCount; } ////////////////////////////////////////////////////////////////////////////////////////////////// HRESULT __stdcall dropTarget::DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL ptl, DWORD* pdwEffect) { _DataObject = pDataObject; //IDataObjectを記憶してDragOverでも使えるようにする SetForegroundWindow(hWnd) ; SetCapture(hWnd) ; HCURSOR cur ; cur = LoadCursor(NULL, IDC_ARROW) ; SetCursor(cur) ; SetClassLong(hWnd, GCL_HCURSOR, (LONG)cur) ; // MessageBox(hWnd, "きてるよ", "DragEnter", MB_OK) ; return DragOver(grfKeyState, ptl, pdwEffect); //あとはDragOverと同じ } HRESULT __stdcall dropTarget::DragOver(DWORD grfKeyState, POINTL ptl, DWORD* pdwEffect) { //フォーマットに対応した処理をする FORMATETC ft ; ft.cfFormat = CF_TEXT ; ft.ptd = NULL ; ft.dwAspect = DVASPECT_CONTENT ; ft.lindex = -1 ; ft.tymed = TYMED_HGLOBAL ; *pdwEffect = DROPEFFECT_COPY ; if(_DataObject->QueryGetData(&ft) == S_OK) { HCURSOR cursor ; cursor = LoadCursor(NULL, IDC_ARROW) ; SetCursor(cursor) ; STGMEDIUM sg ; if(_DataObject->GetData(&ft, &sg) == S_OK) { LPVOID lpdat ; lpdat = GlobalLock(sg.hGlobal) ; int len ; len = lstrlen((LPSTR)lpdat) ; lstrcpy(url, (LPSTR)lpdat) ; GlobalUnlock(sg.hGlobal) ; ReleaseStgMedium(&sg) ; if((grfKeyState & MK_LBUTTON) == 0) { MessageBox(NULL, url, "URL from IE?", MB_OK) ; } } } return S_OK; } HRESULT __stdcall dropTarget::DragLeave() { ReleaseCapture() ; _DataObject = NULL ; HCURSOR cursor ; cursor = LoadCursor(NULL, IDC_NO) ; SetCursor(cursor) ; return S_OK; } HRESULT __stdcall dropTarget::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL ptl, DWORD* pdwEffect) { *pdwEffect = DROPEFFECT_COPY; FORMATETC ft ; ft.cfFormat = CF_TEXT ; ft.ptd = NULL ; ft.dwAspect = DVASPECT_CONTENT ; ft.lindex = -1 ; ft.tymed = TYMED_HGLOBAL ; STGMEDIUM sg ; if(_DataObject->GetData(&ft, &sg) == S_OK) { LPVOID lpdat ; lpdat = GlobalLock(sg.hGlobal) ; int len ; len = lstrlen((LPSTR)lpdat) ; char *string ; string = new char[len+1] ; lstrcpy(string, (LPSTR)lpdat) ; GlobalUnlock(sg.hGlobal) ; ReleaseStgMedium(&sg) ; MessageBox(NULL, string, "URL?", MB_OK) ; delete [] string ; } MessageBox(NULL, "キターーーーー", "キター", MB_OK) ; return S_OK; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.