#ifndef _BASEFVCB_ #define _BASEFVCB_ #include // base shell folder view callback to derive from class CBaseShellFolderViewCB : public IShellFolderViewCB, public IServiceProvider, public CObjectWithSite { public: CBaseShellFolderViewCB(LPCITEMIDLIST pidl, LONG lEvents); STDMETHOD(RealMessage)(UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; // IUnknown STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IShellFolderViewCB STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam); // IServiceProvider STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppv) { *ppv = NULL; return E_NOTIMPL; }; protected: virtual ~CBaseShellFolderViewCB(); HRESULT _BrowseObject(LPCITEMIDLIST pidlFull, UINT uFlags = 0) { IShellBrowser* psb; HRESULT hr = IUnknown_QueryService(_punkSite, SID_STopLevelBrowser, IID_PPV_ARG(IShellBrowser, &psb)); if (SUCCEEDED(hr)) { hr = psb->BrowseObject(pidlFull, uFlags); psb->Release(); } return hr; } HWND _hwndMain; LONG _cRef; LPITEMIDLIST _pidl; LONG _lEvents; }; // view callback helpers typedef struct { ULONGLONG cbBytes; // total size of items selected int nItems; // number of items selected int cFiles; // # of files int cHiddenFiles; // # of hiddenf iles ULONGLONG cbSize; // total size of selected files int cNonFolders; // how many non-folders we have TCHAR szDrive[MAX_PATH];// drive info (if in explorer mode) ULONGLONG cbFree; // drive free space } FSSELCHANGEINFO; // status bar helpers to be used from the view callback STDAPI ViewUpdateStatusBar(IUnknown *psite, LPCITEMIDLIST pidlFolder, FSSELCHANGEINFO *pfssci); STDAPI_(void) ViewInsertDeleteItem(IShellFolder2 *psf, FSSELCHANGEINFO *pfssci, LPCITEMIDLIST pidl, int iMul); STDAPI_(void) ViewSelChange(IShellFolder2 *psf, SFVM_SELCHANGE_DATA* pdvsci, FSSELCHANGEINFO *pfssci); STDAPI_(void) ResizeStatus(IUnknown *psite, UINT cx); STDAPI_(void) InitializeStatus(IUnknown *psite); STDAPI_(void) SetStatusText(IUnknown *psite, LPCTSTR *ppszText, int iStart, int iEnd); // view callback helpers STDAPI DefaultGetWebViewTemplateFromHandler(LPCTSTR pszKey, SFVM_WEBVIEW_TEMPLATE_DATA* pvi); STDAPI DefaultGetWebViewTemplateFromClsid(REFCLSID clsid, SFVM_WEBVIEW_TEMPLATE_DATA* pvi); STDAPI DefaultGetWebViewTemplateFromPath(LPCTSTR pszDir, SFVM_WEBVIEW_TEMPLATE_DATA* pvi); #endif // _BASEFVCB_