C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[44771] Re:[질문] URL Drop
둘리 [dooly386] 1196 읽음    2006-05-08 13:03
//---------------------------------------------------------------------------

#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을 알고 싶은데
:
: 어떻게 해야 하나요?

+ -

관련 글 리스트
44767 [질문] URL Drop 빌초 814 2006/05/07
44771     Re:[질문] URL Drop 둘리 1196 2006/05/08
44780         Re:Re:[질문] URL Drop 초보 1066 2006/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.