|
둘리님 정말 감사드립니다. (__)
WIN API도 잘 모르고 초보라서 올려주신 소스 분석하는데도 꽤 시간이 걸리겠네요. ^^;
잘 쓰겠습니다.
다시 한 번 감사드립니다~
둘리 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #include <oleidl.h>
:
: #pragma hdrstop
:
: #include "Unit2.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm2 *Form2;
: //---------------------------------------------------------------------------
:
: class CDropTarget : public IDropTarget
: {
: public:
: // IUnknown implementation
: HRESULT __stdcall QueryInterface (REFIID iid, void ** ppvObject);
: ULONG __stdcall AddRef (void);
: ULONG __stdcall Release (void);
:
: // IDropTarget implementation
: HRESULT __stdcall DragEnter(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect);
: HRESULT __stdcall DragOver(DWORD grfKeyState, POINTL pt, DWORD * pdwEffect);
: HRESULT __stdcall DragLeave(void);
: HRESULT __stdcall Drop(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect);
:
: // Constructor
: CDropTarget(HWND hwnd);
: ~CDropTarget();
:
: // internal helper function
: bool __stdcall QueryDrop(DWORD grfKeyState, DWORD *pdwEffect);
:
:
: private:
:
: // Private member variables
: LONG m_lRefCount;
: HWND m_hWnd;
:
: };
:
: CDropTarget::CDropTarget(HWND hwnd) : m_hWnd(hwnd), m_lRefCount(1)
: {
: }
:
: CDropTarget::~CDropTarget()
: {
: }
:
: HRESULT __stdcall CDropTarget::QueryInterface (REFIID iid, void ** ppvObject)
: {
: if(iid == IID_IDropTarget || iid == IID_IUnknown)
: {
: AddRef();
: *ppvObject = this;
: return S_OK;
: }
: else
: {
: *ppvObject = 0;
: return E_NOINTERFACE;
: }
: }
:
: ULONG __stdcall CDropTarget::AddRef(void)
: {
: return InterlockedIncrement(&m_lRefCount);
: }
:
: ULONG __stdcall CDropTarget::Release(void)
: {
: LONG count = InterlockedDecrement(&m_lRefCount);
:
: if(count == 0)
: {
: delete this;
: return 0;
: }
: else
: {
: return count;
: }
: }
:
: DWORD DropEffect(DWORD dwAllowed)
: {
: DWORD dwEffect = dwAllowed & DROPEFFECT_COPY;
:
: if(dwEffect == 0)
: dwEffect = dwAllowed;
:
: return dwEffect;
: }
:
: HRESULT __stdcall CDropTarget::DragEnter(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
: {
: *pdwEffect = DropEffect(*pdwEffect);
:
: return S_OK;
: }
:
: HRESULT __stdcall CDropTarget::DragOver(DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
: {
: *pdwEffect = DropEffect(*pdwEffect);
: return S_OK;
: }
:
: HRESULT __stdcall CDropTarget::DragLeave(void)
: {
: return S_OK;
: }
:
:
: HRESULT __stdcall CDropTarget::Drop(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
: {
: FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
: STGMEDIUM stgmed;
:
: if(pDataObject->GetData(&fmtetc, &stgmed) == S_OK)
: {
: // We need to lock the HGLOBAL handle because we can't
: // be sure if this is GMEM_FIXED (i.e. normal heap) data or not
: char *data = (char *)GlobalLock(stgmed.hGlobal);
: Form2->Caption = data;
:
: }
:
: *pdwEffect = DROPEFFECT_NONE;//DropEffect(*pdwEffect);
:
: return S_OK;
: }
:
: void RegisterDropWindow(HWND hwnd)
: {
: CDropTarget *pDropTarget = new CDropTarget(hwnd);
:
: RegisterDragDrop(hwnd, pDropTarget);
: }
:
: void UnregisterDropWindow(HWND hwnd)
: {
: RevokeDragDrop(hwnd);
: }
: //--------------------------------------------------------------------------------
: __fastcall TForm2::TForm2(TComponent* Owner)
: : TForm(Owner)
: {
: OleInitialize(0);
: InitCommonControls();
: RegisterDropWindow(Handle);
: }
: //---------------------------------------------------------------------------
:
:
: 빌초 님이 쓰신 글 :
: : 익스플로러 창에 있는 URL을
: :
: : Form 위에 드래그&드롭 해서 그 URL을 알고 싶은데
: :
: : 어떻게 해야 하나요?
|