windows-nt/Source/XPSP1/NT/shell/ext/cscui/items.h
2020-09-26 16:20:57 +08:00

142 lines
5 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: items.h
//
//--------------------------------------------------------------------------
#ifndef _INC_CSCUI_ITEMS_H
#define _INC_CSCUI_ITEMS_H
#ifndef _INC_SHELL_IDLDATA_H
# include "idldata.h"
#endif
class COfflineItemsData : public CIDLData
{
public:
COfflineItemsData(LPCITEMIDLIST pidlFolder,
UINT cidl,
LPCITEMIDLIST *apidl,
HWND hwndParent,
IShellFolder *psfOwner = NULL,
IDataObject *pdtInner = NULL);
~COfflineItemsData(void);
STDMETHODIMP GetData(FORMATETC *pFEIn, STGMEDIUM *pstm);
STDMETHODIMP SetData(FORMATETC *pFEIn, STGMEDIUM *pstm, BOOL fRelease);
STDMETHODIMP QueryGetData(FORMATETC *pFE);
static HRESULT CreateInstance(COfflineItemsData **ppOut,
LPCITEMIDLIST pidlFolder,
UINT cidl,
LPCITEMIDLIST *apidl,
HWND hwndParent,
IShellFolder *psfOwner = NULL,
IDataObject *pdtInner = NULL);
static HRESULT CreateInstance(IDataObject **ppOut,
LPCITEMIDLIST pidlFolder,
UINT cidl,
LPCITEMIDLIST *apidl,
HWND hwndParent,
IShellFolder *psfOwner = NULL,
IDataObject *pdtInner = NULL);
HRESULT CtorResult(void) const
{ return m_hrCtor; }
protected:
HRESULT ProvideFormats(CEnumFormatEtc *pEnumFmtEtc);
private:
HWND m_hwndParent;
LPCOLID *m_rgpolid; // Pidls cloned in private format.
int m_cItems;
HRESULT m_hrCtor;
DWORD m_dwPreferredEffect;
DWORD m_dwPerformedEffect;
DWORD m_dwLogicalPerformedEffect;
static CLIPFORMAT m_cfHDROP;
static CLIPFORMAT m_cfFileContents;
static CLIPFORMAT m_cfFileDesc;
static CLIPFORMAT m_cfPreferedEffect;
static CLIPFORMAT m_cfPerformedEffect;
static CLIPFORMAT m_cfLogicalPerformedEffect;
static CLIPFORMAT m_cfDataSrcClsid;
HRESULT CreateFileDescriptor(STGMEDIUM *pstm);
HRESULT CreateFileContents(STGMEDIUM *pstm, LONG lindex);
HRESULT CreatePrefDropEffect(STGMEDIUM *pstm);
HRESULT CreatePerformedDropEffect(STGMEDIUM *pstm);
HRESULT CreateLogicalPerformedDropEffect(STGMEDIUM *pstm);
HRESULT CreateHDROP(STGMEDIUM *pstm);
HRESULT CreateDataSrcClsid(STGMEDIUM *pstm);
HRESULT CreateDWORD(STGMEDIUM *pstm, DWORD dwEffect);
DWORD GetDataDWORD(FORMATETC *pfe, STGMEDIUM *pstm, DWORD *pdwOut);
//
// Prevent copy.
//
COfflineItemsData(const COfflineItemsData& rhs);
COfflineItemsData& operator = (const COfflineItemsData& rhs);
};
class COfflineItems : public IContextMenu,
public IQueryInfo
{
public:
HRESULT Initialize(UINT cidl, LPCITEMIDLIST *ppidl);
//
// IUnknown Methods
//
STDMETHODIMP QueryInterface(REFIID,void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// IContextMenu Methods
//
STDMETHODIMP QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpici);
STDMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uType,UINT *pwReserved, LPSTR pszName, UINT cchMax);
//
// IQueryInfo Methods
//
STDMETHODIMP GetInfoTip(DWORD dwFlags, WCHAR **ppwszTip);
STDMETHODIMP GetInfoFlags(DWORD *pdwFlags);
static HRESULT CreateInstance(COfflineFilesFolder *pfolder,
HWND hwnd,
UINT cidl,
LPCITEMIDLIST *ppidl,
REFIID riid,
void **ppv);
private:
//
// Only create through CreateInstance() static function.
//
COfflineItems(COfflineFilesFolder *pfolder, HWND hwnd);
~COfflineItems();
LONG m_cRef; // reference count
COfflineFilesFolder *m_pFolder; // back pointer to our shell folder
UINT m_cItems; // number of items we represent
LPCOLID *m_ppolid; // variable size array of items
HWND m_hwndBrowser;
};
#endif // _INC_CSCUI_ITEMS_H