107 lines
3.6 KiB
C
107 lines
3.6 KiB
C
|
#ifndef __CONTROL_ITEM__
|
||
|
#define __CONTROL_ITEM__
|
||
|
|
||
|
#include "folder.h"
|
||
|
#include "cdlbsc.hpp"
|
||
|
|
||
|
class CControlItem : public IDataObject,
|
||
|
public IExtractIcon,
|
||
|
public IContextMenu
|
||
|
{
|
||
|
// CControlItem interfaces
|
||
|
friend HRESULT ControlFolderView_DidDragDrop(
|
||
|
HWND hwnd,
|
||
|
IDataObject *pdo,
|
||
|
DWORD dwEffect);
|
||
|
|
||
|
public:
|
||
|
CControlItem();
|
||
|
HRESULT Initialize(
|
||
|
CControlFolder *pCFolder,
|
||
|
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,
|
||
|
LPTSTR pszName,
|
||
|
UINT cchMax);
|
||
|
|
||
|
// IDataObject Methods...
|
||
|
STDMETHODIMP GetData(LPFORMATETC pFEIn, LPSTGMEDIUM pSTM);
|
||
|
STDMETHODIMP GetDataHere(LPFORMATETC pFE, LPSTGMEDIUM pSTM);
|
||
|
STDMETHODIMP QueryGetData(LPFORMATETC pFE);
|
||
|
STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC pFEIn, LPFORMATETC pFEOut);
|
||
|
STDMETHODIMP SetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM, BOOL fRelease);
|
||
|
STDMETHODIMP EnumFormatEtc(DWORD dwDirection, LPENUMFORMATETC *ppEnum);
|
||
|
STDMETHODIMP DAdvise(LPFORMATETC pFE, DWORD grfAdv, LPADVISESINK pAdvSink,
|
||
|
LPDWORD pdwConnection);
|
||
|
STDMETHODIMP DUnadvise(DWORD dwConnection);
|
||
|
STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *ppEnum);
|
||
|
|
||
|
// IDataObject helper functions
|
||
|
HRESULT CreatePrefDropEffect(STGMEDIUM *pSTM);
|
||
|
HRESULT Remove(HWND hwnd);
|
||
|
/*
|
||
|
HRESULT _CreateHDROP(STGMEDIUM *pmedium);
|
||
|
HRESULT _CreateNameMap(STGMEDIUM *pmedium);
|
||
|
HRESULT _CreateFileDescriptor(STGMEDIUM *pSTM);
|
||
|
HRESULT _CreateFileContents(STGMEDIUM *pSTM, LONG lindex);
|
||
|
HRESULT _CreateURL(STGMEDIUM *pSTM);
|
||
|
HRESULT _CreatePrefDropEffect(STGMEDIUM *pSTM);
|
||
|
*/
|
||
|
|
||
|
// IExtractIcon Methods
|
||
|
STDMETHODIMP GetIconLocation(
|
||
|
UINT uFlags,
|
||
|
LPSTR szIconFile,
|
||
|
UINT cchMax,
|
||
|
int *piIndex,
|
||
|
UINT *pwFlags);
|
||
|
STDMETHODIMP Extract(
|
||
|
LPCSTR pszFile,
|
||
|
UINT nIconIndex,
|
||
|
HICON *phiconLarge,
|
||
|
HICON *phiconSmall,
|
||
|
UINT nIconSize);
|
||
|
|
||
|
// Support for our progress UI
|
||
|
static INT_PTR DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
// Misc helper function
|
||
|
|
||
|
static BOOL IsGlobalOffline();
|
||
|
|
||
|
protected:
|
||
|
|
||
|
~CControlItem();
|
||
|
|
||
|
HRESULT Update(LPCMINVOKECOMMANDINFO pici, LPCONTROLPIDL pcpidl);
|
||
|
|
||
|
UINT m_cRef; // reference count
|
||
|
UINT m_cItems; // number of items we represent
|
||
|
CControlFolder* m_pCFolder; // back pointer to our shell folder
|
||
|
LPCONTROLPIDL* m_ppcei; // variable size array of items
|
||
|
LPCMINVOKECOMMANDINFO m_piciUpdate;
|
||
|
LPCONTROLPIDL m_pcpidlUpdate;
|
||
|
CodeDownloadBSC *m_pcdlbsc;
|
||
|
};
|
||
|
|
||
|
#endif
|