mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			192 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
 | |
| // reserved. Use of this source code is governed by a BSD-style license that
 | |
| // can be found in the LICENSE file.
 | |
| 
 | |
| #ifndef CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_
 | |
| #define CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_
 | |
| #pragma once
 | |
| 
 | |
| // When generating projects with CMake the CEF_USE_ATL value will be defined
 | |
| // automatically if using a supported Visual Studio version. Pass -DUSE_ATL=OFF
 | |
| // to the CMake command-line to disable use of ATL.
 | |
| // Uncomment this line to manually enable ATL support.
 | |
| // #define CEF_USE_ATL 1
 | |
| 
 | |
| #if defined(CEF_USE_ATL)
 | |
| 
 | |
| #include <atlcomcli.h>
 | |
| #include <objidl.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| #include "tests/cefclient/browser/osr_dragdrop_events.h"
 | |
| 
 | |
| namespace client {
 | |
| 
 | |
| #define DEFAULT_QUERY_INTERFACE(__Class)                            \
 | |
|   HRESULT __stdcall QueryInterface(const IID& iid, void** object) { \
 | |
|     *object = nullptr;                                              \
 | |
|     if (IsEqualIID(iid, IID_IUnknown)) {                            \
 | |
|       IUnknown* obj = this;                                         \
 | |
|       *object = obj;                                                \
 | |
|     } else if (IsEqualIID(iid, IID_##__Class)) {                    \
 | |
|       __Class* obj = this;                                          \
 | |
|       *object = obj;                                                \
 | |
|     } else {                                                        \
 | |
|       return E_NOINTERFACE;                                         \
 | |
|     }                                                               \
 | |
|     AddRef();                                                       \
 | |
|     return S_OK;                                                    \
 | |
|   }
 | |
| #define IUNKNOWN_IMPLEMENTATION                     \
 | |
|   ULONG __stdcall AddRef() { return ++ref_count_; } \
 | |
|   ULONG __stdcall Release() {                       \
 | |
|     if (--ref_count_ == 0) {                        \
 | |
|       delete this;                                  \
 | |
|       return 0U;                                    \
 | |
|     }                                               \
 | |
|     return ref_count_;                              \
 | |
|   }                                                 \
 | |
|                                                     \
 | |
|  protected:                                         \
 | |
|   ULONG ref_count_;
 | |
| 
 | |
| class DropTargetWin : public IDropTarget {
 | |
|  public:
 | |
|   static CComPtr<DropTargetWin> Create(OsrDragEvents* callback, HWND hWnd);
 | |
| 
 | |
|   CefBrowserHost::DragOperationsMask StartDragging(
 | |
|       CefRefPtr<CefBrowser> browser,
 | |
|       CefRefPtr<CefDragData> drag_data,
 | |
|       CefRenderHandler::DragOperationsMask allowed_ops,
 | |
|       int x,
 | |
|       int y);
 | |
| 
 | |
|   // IDropTarget implementation:
 | |
|   HRESULT __stdcall DragEnter(IDataObject* data_object,
 | |
|                               DWORD key_state,
 | |
|                               POINTL cursor_position,
 | |
|                               DWORD* effect);
 | |
| 
 | |
|   HRESULT __stdcall DragOver(DWORD key_state,
 | |
|                              POINTL cursor_position,
 | |
|                              DWORD* effect);
 | |
| 
 | |
|   HRESULT __stdcall DragLeave();
 | |
| 
 | |
|   HRESULT __stdcall Drop(IDataObject* data_object,
 | |
|                          DWORD key_state,
 | |
|                          POINTL cursor_position,
 | |
|                          DWORD* effect);
 | |
| 
 | |
|   DEFAULT_QUERY_INTERFACE(IDropTarget)
 | |
|   IUNKNOWN_IMPLEMENTATION
 | |
| 
 | |
|  protected:
 | |
|   DropTargetWin(OsrDragEvents* callback, HWND hWnd)
 | |
|       : ref_count_(0), callback_(callback), hWnd_(hWnd) {}
 | |
|   virtual ~DropTargetWin() {}
 | |
| 
 | |
|  private:
 | |
|   OsrDragEvents* callback_;
 | |
|   HWND hWnd_;
 | |
| 
 | |
|   CefRefPtr<CefDragData> current_drag_data_;
 | |
| };
 | |
| 
 | |
| class DropSourceWin : public IDropSource {
 | |
|  public:
 | |
|   static CComPtr<DropSourceWin> Create();
 | |
| 
 | |
|   // IDropSource implementation:
 | |
|   HRESULT __stdcall GiveFeedback(DWORD dwEffect);
 | |
| 
 | |
|   HRESULT __stdcall QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState);
 | |
| 
 | |
|   DEFAULT_QUERY_INTERFACE(IDropSource)
 | |
|   IUNKNOWN_IMPLEMENTATION
 | |
| 
 | |
|  protected:
 | |
|   explicit DropSourceWin() : ref_count_(0) {}
 | |
|   virtual ~DropSourceWin() {}
 | |
| };
 | |
| 
 | |
| class DragEnumFormatEtc : public IEnumFORMATETC {
 | |
|  public:
 | |
|   static HRESULT CreateEnumFormatEtc(UINT cfmt,
 | |
|                                      FORMATETC* afmt,
 | |
|                                      IEnumFORMATETC** ppEnumFormatEtc);
 | |
| 
 | |
|   //
 | |
|   // IEnumFormatEtc members
 | |
|   //
 | |
|   HRESULT __stdcall Next(ULONG celt,
 | |
|                          FORMATETC* pFormatEtc,
 | |
|                          ULONG* pceltFetched);
 | |
|   HRESULT __stdcall Skip(ULONG celt);
 | |
|   HRESULT __stdcall Reset(void);
 | |
|   HRESULT __stdcall Clone(IEnumFORMATETC** ppEnumFormatEtc);
 | |
| 
 | |
|   //
 | |
|   // Construction / Destruction
 | |
|   //
 | |
|   DragEnumFormatEtc(FORMATETC* pFormatEtc, int nNumFormats);
 | |
|   virtual ~DragEnumFormatEtc();
 | |
| 
 | |
|   static void DeepCopyFormatEtc(FORMATETC* dest, FORMATETC* source);
 | |
| 
 | |
|   DEFAULT_QUERY_INTERFACE(IEnumFORMATETC)
 | |
|   IUNKNOWN_IMPLEMENTATION
 | |
| 
 | |
|  private:
 | |
|   ULONG m_nIndex;           // current enumerator index
 | |
|   ULONG m_nNumFormats;      // number of FORMATETC members
 | |
|   FORMATETC* m_pFormatEtc;  // array of FORMATETC objects
 | |
| };
 | |
| 
 | |
| class DataObjectWin : public IDataObject {
 | |
|  public:
 | |
|   static CComPtr<DataObjectWin> Create(FORMATETC* fmtetc,
 | |
|                                        STGMEDIUM* stgmed,
 | |
|                                        int count);
 | |
| 
 | |
|   // IDataObject memberS
 | |
|   HRESULT __stdcall GetDataHere(FORMATETC* pFormatEtc, STGMEDIUM* pmedium);
 | |
|   HRESULT __stdcall QueryGetData(FORMATETC* pFormatEtc);
 | |
|   HRESULT __stdcall GetCanonicalFormatEtc(FORMATETC* pFormatEct,
 | |
|                                           FORMATETC* pFormatEtcOut);
 | |
|   HRESULT __stdcall SetData(FORMATETC* pFormatEtc,
 | |
|                             STGMEDIUM* pMedium,
 | |
|                             BOOL fRelease);
 | |
|   HRESULT __stdcall DAdvise(FORMATETC* pFormatEtc,
 | |
|                             DWORD advf,
 | |
|                             IAdviseSink*,
 | |
|                             DWORD*);
 | |
|   HRESULT __stdcall DUnadvise(DWORD dwConnection);
 | |
|   HRESULT __stdcall EnumDAdvise(IEnumSTATDATA** ppEnumAdvise);
 | |
| 
 | |
|   HRESULT __stdcall EnumFormatEtc(DWORD dwDirection,
 | |
|                                   IEnumFORMATETC** ppEnumFormatEtc);
 | |
|   HRESULT __stdcall GetData(FORMATETC* pFormatEtc, STGMEDIUM* pMedium);
 | |
| 
 | |
|   DEFAULT_QUERY_INTERFACE(IDataObject)
 | |
|   IUNKNOWN_IMPLEMENTATION
 | |
| 
 | |
|  protected:
 | |
|   int m_nNumFormats;
 | |
|   FORMATETC* m_pFormatEtc;
 | |
|   STGMEDIUM* m_pStgMedium;
 | |
| 
 | |
|   static HGLOBAL DupGlobalMem(HGLOBAL hMem);
 | |
| 
 | |
|   int LookupFormatEtc(FORMATETC* pFormatEtc);
 | |
| 
 | |
|   explicit DataObjectWin(FORMATETC* fmtetc, STGMEDIUM* stgmed, int count);
 | |
|   virtual ~DataObjectWin() {}
 | |
| };
 | |
| 
 | |
| }  // namespace client
 | |
| 
 | |
| #endif  // defined(CEF_USE_ATL)
 | |
| 
 | |
| #endif  // CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_
 |