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

202 lines
5.9 KiB
C++

//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
//
// persist.h
//
// The definitions for cdf IPersistFile and IPersistFolder interfaces. This
// class is used as a base class by the CCdfView and CIconHandler.
//
// History:
//
// 4/23/97 edwardp Created.
//
////////////////////////////////////////////////////////////////////////////////
//
// Check for previous includes of this file.
//
#ifndef _PERSIST_H_
#define _PERSIST_H_
//
// Function prototypes.
//
HRESULT ClearGleamFlag(LPCTSTR pszURL, LPCTSTR pszPath);
HRESULT URLGetLocalFileName(LPCTSTR pszURL,
LPTSTR szLocalFile,
int cch,
FILETIME* pftLastMod);
HRESULT URLGetLastModTime(LPCTSTR pszURL, FILETIME* pftLastMod);
//
// Data types.
//
typedef enum _tagINITTYPE
{
IT_UNKNOWN = 0,
IT_FILE,
IT_INI,
IT_SHORTCUT
} INITTYPE;
//
// Parse flags.
//
#define PARSE_LOCAL 0x00000001
#define PARSE_NET 0x00000002
#define PARSE_REPARSE 0x00000004
#define PARSE_REMOVEGLEAM 0x00000008
//
// Strings used by initialization helper functions.
//
#define TSTR_INI_FILE TEXT(FILENAME_SEPARATOR_STR)##TEXT("desktop.ini") // Must include leading \.
#define TSTR_INI_SECTION TEXT("Channel")
#define TSTR_INI_URL TEXT("CDFURL")
#define TSTR_INI_LOGO TEXT("Logo")
#define TSTR_INI_WIDELOGO TEXT("WideLogo")
#define TSTR_INI_ICON TEXT("Icon")
//
// Function protoypes
//
#define WM_NAVIGATE (WM_USER+1)
#define WM_NAVIGATE_PANE (WM_USER+2)
LRESULT CALLBACK NavigateWndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam);
//
// Class definition for CPersist
//
class CPersist : public IPersistFile,
public IPersistFolder,
public IPersistMoniker,
public IOleObject
{
//
// Methods.
//
public:
// Constructor and destructor.
CPersist(void);
CPersist(BOOL bCdfParsed);
~CPersist(void);
//IUnknown - Pure virtual functions.
// IUnknown
virtual STDMETHODIMP QueryInterface(REFIID, void **) PURE;
virtual STDMETHODIMP_(ULONG) AddRef(void) PURE;
virtual STDMETHODIMP_(ULONG) Release(void) PURE;
//IPersist - Shared by IPersistFile and IPersistFolder.
STDMETHODIMP GetClassID(LPCLSID lpClassID);
//IPersistFile
STDMETHODIMP IsDirty(void);
STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode);
STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember);
STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName);
STDMETHODIMP GetCurFile(LPOLESTR* ppszFileName);
// IPersistFolder
virtual STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
// IPersistMoniker
//STDMETHODIMP IsDirty(void);
STDMETHODIMP Load(BOOL fFullyAvailable, IMoniker* pIMoniker,
IBindCtx* pIBindCtx, DWORD grfMode);
STDMETHODIMP Save(IMoniker* pIMoniker, IBindCtx* pIBindCtx, BOOL fRemember);
STDMETHODIMP SaveCompleted(IMoniker* pIMoniker, IBindCtx* pIBindCtx);
STDMETHODIMP GetCurMoniker(IMoniker** ppIMoniker);
// IOleObject.
STDMETHODIMP SetClientSite(IOleClientSite *pClientSite);
STDMETHODIMP GetClientSite(IOleClientSite **ppClientSite);
STDMETHODIMP SetHostNames(LPCOLESTR szContainerApp,
LPCOLESTR szContainerObj);
STDMETHODIMP Close(DWORD dwSaveOption);
STDMETHODIMP SetMoniker(DWORD dwWhichMoniker, IMoniker *pmk);
STDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker,
IMoniker **ppmk);
STDMETHODIMP InitFromData(IDataObject *pDataObject, BOOL fCreation,
DWORD dwReserved);
STDMETHODIMP GetClipboardData(DWORD dwReserved,IDataObject **ppDataObject);
STDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite,
LONG lindex,HWND hwndParent,LPCRECT lprcPosRect);
STDMETHODIMP EnumVerbs(IEnumOLEVERB **ppEnumOleVerb);
STDMETHODIMP Update(void);
STDMETHODIMP IsUpToDate(void);
STDMETHODIMP GetUserClassID(CLSID *pClsid);
STDMETHODIMP GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType);
STDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel);
STDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel);
STDMETHODIMP Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection);
STDMETHODIMP Unadvise(DWORD dwConnection);
STDMETHODIMP EnumAdvise(IEnumSTATDATA **ppenumAdvise);
STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus);
STDMETHODIMP SetColorScheme(LOGPALETTE *pLogpal);
//protected:
//Helper functions derived classes can call.
HRESULT ParseCdf(HWND hwndOwner, IXMLDocument** ppIXMLDocument,
DWORD dwParseFlags);
BSTR ReadFromIni(LPCTSTR pszKey);
BOOL IsUnreadCdf(void);
BOOL IsRecentlyChangedURL(LPCTSTR pszURL);
private:
// Internal helper functions.
HRESULT Parse(LPTSTR szURL, IXMLDocument** ppIXMLDocument);
INITTYPE GetInitType(LPTSTR szPath);
BOOL ReadFromIni(LPCTSTR pszKey, LPTSTR szOut, int cch);
HRESULT InitializeFromURL(LPTSTR szURL, IXMLDocument** ppIXMLDocument,
DWORD dwParseFlags);
HRESULT OpenChannel(LPCWSTR pszSubscribedURL);
HWND CreateNavigationWorkerWindow(HWND hwndParent,
IWebBrowser2* pIWebBrowser2);
void QuickCheckInitType( void );
//
// Member variables.
//
protected:
BOOL m_bCdfParsed;
TCHAR m_szPath[INTERNET_MAX_URL_LENGTH];
LPOLESTR m_polestrURL;
IWebBrowser2* m_pIWebBrowser2;
HWND m_hwnd;
IXMLDocument* m_pIXMLDocument;
BOOL m_fPendingNavigation;
INITTYPE m_rgInitType;
#ifdef IMP_CLIENTSITE
IOleClientSite* m_pOleClientSite;
#endif
};
#endif // _PERSIST_H_