|
Java example source code file (awt_DnDDS.h)
The awt_DnDDS.h Java example source code/* * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ #ifndef AWT_DND_DS_H #define AWT_DND_DS_H #include <Ole2.h> #include <jni.h> #include <jvm.h> #include <jni_util.h> #include "awt_Object.h" #include "awt_Component.h" #include "awt_Window.h" class AwtCursor; /** * Drag Source code */ class AwtDragSource : virtual public IDropSource, virtual public IDataObject { public: AwtDragSource(JNIEnv* env, jobject peer, jobject component, jobject transferable, jobject trigger, jint actions, jlongArray formats, jobject formatMap); virtual ~AwtDragSource(); // IUnknown virtual HRESULT __stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject); virtual ULONG __stdcall AddRef(void); virtual ULONG __stdcall Release(void); // IDropSource virtual HRESULT __stdcall QueryContinueDrag(BOOL fEscapeKeyPressed, DWORD grfKeyState); virtual HRESULT __stdcall GiveFeedback(DWORD dwEffect); // IDataObject virtual HRESULT __stdcall GetData(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium); virtual HRESULT __stdcall GetDataHere(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium); virtual HRESULT __stdcall QueryGetData(FORMATETC __RPC_FAR *pFormatEtc); virtual HRESULT __stdcall GetCanonicalFormatEtc(FORMATETC __RPC_FAR *pFormatEtcIn, FORMATETC __RPC_FAR *pFormatEtcOut); virtual HRESULT __stdcall SetData(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium, BOOL fRelease); virtual HRESULT __stdcall EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC *__RPC_FAR *ppenumFormatEtc); virtual HRESULT __stdcall DAdvise(FORMATETC __RPC_FAR *pFormatEtc, DWORD advf, IAdviseSink __RPC_FAR *pAdvSink, DWORD __RPC_FAR *pdwConnection); virtual HRESULT __stdcall DUnadvise(DWORD dwConnection); virtual HRESULT __stdcall EnumDAdvise(IEnumSTATDATA __RPC_FAR *__RPC_FAR *ppenumAdvise); // AwtDragSource static void StartDrag( AwtDragSource* self, jobject cursor, jintArray imageData, jint imageWidth, jint imageHeight, jint x, jint y); HRESULT ChangeCursor(); void SetCursor(jobject cursor); INLINE unsigned int getNTypes() { return m_ntypes; } INLINE FORMATETC getType(unsigned int i) { return m_types[i]; } INLINE jobject GetPeer() { return m_peer; } INLINE void Signal() { ::ReleaseMutex(m_mutex); } virtual HRESULT __stdcall GetProcessId(FORMATETC __RPC_FAR *pFormatEtc, STGMEDIUM __RPC_FAR *pmedium); protected: INLINE void WaitUntilSignalled(BOOL retain) { do { // nothing ... } while(::WaitForSingleObject(m_mutex, INFINITE) == WAIT_FAILED); if (!retain) ::ReleaseMutex(m_mutex); } static void _DoDragDrop(void* param); HRESULT __stdcall MatchFormatEtc(FORMATETC __RPC_FAR *pFormatEtcIn, FORMATETC *cacheEnt); private: void LoadCache(jlongArray formats); void UnloadCache(); static int __cdecl _compar(const void *, const void *); static void call_dSCenter(JNIEnv* env, jobject self, jint targetActions, jint modifiers, jint x, jint y); static void call_dSCmotion(JNIEnv* env, jobject self, jint targetActions, jint modifiers, jint x, jint y); static void call_dSCchanged(JNIEnv* env, jobject self, jint targetActions, jint modifiers, jint x, jint y); static void call_dSCmouseMoved(JNIEnv* env, jobject self, jint targetActions, jint modifiers, jint x, jint y); static void call_dSCexit(JNIEnv* env, jobject self, jint x, jint y); static void call_dSCddfinished(JNIEnv* env, jobject self, jboolean success, jint operations, jint x, jint y); protected: class ADSIEnumFormatEtc : public virtual IEnumFORMATETC { public: ADSIEnumFormatEtc(AwtDragSource* parent); virtual ~ADSIEnumFormatEtc(); // IUnknown virtual HRESULT __stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject); virtual ULONG __stdcall AddRef(void); virtual ULONG __stdcall Release(void); // IEnumFORMATETC virtual HRESULT _stdcall Next(ULONG celt, FORMATETC __RPC_FAR *rgelt, ULONG __RPC_FAR *pceltFetched); virtual HRESULT _stdcall Skip(ULONG celt); virtual HRESULT _stdcall Reset(); virtual HRESULT _stdcall Clone(IEnumFORMATETC __RPC_FAR *__RPC_FAR *ppenum); private: AwtDragSource* m_parent; ULONG m_refs; unsigned int m_idx; }; class ADSIStreamProxy : public virtual IStream { private: ADSIStreamProxy(ADSIStreamProxy* cloneof); public: ADSIStreamProxy(AwtDragSource* parent, jbyteArray buffer, jint len); virtual ~ADSIStreamProxy(); // IUnknown virtual HRESULT __stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject); virtual ULONG __stdcall AddRef(void); virtual ULONG __stdcall Release(void); // IStream virtual HRESULT __stdcall Read(void __RPC_FAR *pv, ULONG cb, ULONG __RPC_FAR *pcbRead); virtual HRESULT __stdcall Write(const void __RPC_FAR *pv, ULONG cb, ULONG __RPC_FAR *pcbWritten); virtual HRESULT __stdcall Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER __RPC_FAR *plibNewPosition); virtual HRESULT __stdcall SetSize(ULARGE_INTEGER libNewSize); virtual HRESULT __stdcall CopyTo(IStream __RPC_FAR *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER __RPC_FAR *pcbRead, ULARGE_INTEGER __RPC_FAR *pcbWritten); virtual HRESULT __stdcall Commit(DWORD grfCommitFlags); virtual HRESULT __stdcall Revert(); virtual HRESULT __stdcall LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); virtual HRESULT __stdcall UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); virtual HRESULT __stdcall Stat(STATSTG __RPC_FAR *pstatstg, DWORD grfStatFlag); virtual HRESULT __stdcall Clone(IStream __RPC_FAR *__RPC_FAR *ppstm); protected: AwtDragSource* m_parent; signed char* m_buffer; unsigned int m_off; unsigned int m_blen; STATSTG m_statstg; ADSIStreamProxy* m_cloneof; ULONG m_refs; }; public: static const UINT PROCESS_ID_FORMAT; private: // instance vars ... jobject m_peer; jint m_initmods; jint m_lastmods; HWND m_droptarget; int m_enterpending; jint m_actions; FORMATETC* m_types; unsigned int m_ntypes; ULONG m_refs; AwtCursor* m_cursor; HANDLE m_mutex; jobject m_component; jobject m_transferable; jobject m_formatMap; POINT m_dragPoint; POINT m_dropPoint; BOOL m_fNC; BOOL m_bRestoreNodropCustomCursor;//CR 6480706 - MS Bug on hold DWORD m_dwPerformedDropEffect; // static's ... static jclass dSCClazz; static jclass awtIEClazz; static jmethodID dSCdragenter; static jmethodID dSCdragmotion; static jmethodID dSCopschanged; static jmethodID dSCdragexit; static jmethodID dSCddfinish; static jfieldID awtIEmods; }; extern const CLIPFORMAT CF_PERFORMEDDROPEFFECT; extern const CLIPFORMAT CF_FILEGROUPDESCRIPTORA; extern const CLIPFORMAT CF_FILEGROUPDESCRIPTORW; extern const CLIPFORMAT CF_FILECONTENTS; #endif /* AWT_DND_DS_H */ Other Java examples (source code examples)Here is a short list of links related to this Java awt_DnDDS.h source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.