Artifact Content

Not logged in

Artifact 3378ce3cda9a549d59c4bb905f28250da303fbdb


//--- K.I.LIB ---
// kl_dnd.h : drag and drop operation

#ifndef AFX_KIDROPSOURCE_H__141BEF0D_0DA2_4156_93E4_313535916A23__INCLUDED_
#define AFX_KIDROPSOURCE_H__141BEF0D_0DA2_4156_93E4_313535916A23__INCLUDED_

/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
// kiDataObject : ドロップデータとしての標準処理

class kiDataObject : public IDataObject
{
protected: // 派生クラス向け処理

	virtual bool giveData( const FORMATETC& fmt, STGMEDIUM* stg, bool firstcall ) = 0;
	void addFormat( const FORMATETC& frm )
		{
			m_FormatList.add( frm );
		}

protected:	//-- IUnknown -----------

	kiDataObject();
	STDMETHODIMP         QueryInterface( REFIID, void** );
	STDMETHODIMP_(ULONG) AddRef();
	STDMETHODIMP_(ULONG) Release();
private:
	ULONG                m_cRef;

private: //-- IDataObject ------------

	STDMETHODIMP GetData( FORMATETC*, STGMEDIUM* );
	STDMETHODIMP QueryGetData( FORMATETC* );
	STDMETHODIMP EnumFormatEtc( DWORD, IEnumFORMATETC** );
	STDMETHODIMP GetDataHere( FORMATETC*, STGMEDIUM* )
		{
			return E_NOTIMPL;
		}
	STDMETHODIMP GetCanonicalFormatEtc( FORMATETC*, FORMATETC* )
		{
			return E_NOTIMPL;
		}
	STDMETHODIMP SetData( FORMATETC*, STGMEDIUM*, BOOL )
		{
			return E_NOTIMPL;
		}
	STDMETHODIMP DAdvise( FORMATETC*, DWORD, IAdviseSink*, DWORD* )
		{
			return OLE_E_ADVISENOTSUPPORTED;
		}
	STDMETHODIMP DUnadvise( DWORD )
		{
			return OLE_E_NOCONNECTION;
		}
	STDMETHODIMP EnumDAdvise( IEnumSTATDATA** )
		{
			return OLE_E_ADVISENOTSUPPORTED;
		}

private: //-- 内部処理 -----------------

	kiArray<FORMATETC> m_FormatList;
	bool m_bFirst;
	friend class kiDataObject_Enum;

public:
	void begin()
		{
			m_bFirst = true;
		}
};

/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
// kiDropSource : ドロップ元としての標準処理

class kiDropSource : public IDropSource
{
public: //-- ドラッグ&ドロップ実行!

	static bool DnD( kiDataObject* pObj, DWORD efct, DWORD* pefct=NULL );

private: //-- IUnknown

	kiDropSource();
	STDMETHODIMP         QueryInterface( REFIID, void** );
	STDMETHODIMP_(ULONG) AddRef();
	STDMETHODIMP_(ULONG) Release();
	ULONG                m_cRef;

private: //-- IDropSource

	STDMETHODIMP QueryContinueDrag( BOOL, DWORD );
	STDMETHODIMP GiveFeedback( DWORD );
};

#endif