/*****************************************************************************\ FILE: ThemeFile.h DESCRIPTION: This is the Autmation Object to theme scheme object. BryanSt 4/3/2000 (Bryan Starbuck) Copyright (C) Microsoft Corp 2000-2000. All rights reserved. \*****************************************************************************/ #ifndef _FILE_H_THEMEFILE #define _FILE_H_THEMEFILE #include #define THEMESETTING_NORMAL 0x00000000 #define THEMESETTING_LOADINDIRECT 0x00000001 #define SIZE_CURSOR_ARRAY 15 #define SIZE_SOUNDS_ARRAY 30 typedef struct { LPCTSTR pszRegKey; UINT nResourceID; } THEME_FALLBACK_VALUES; extern LPCTSTR s_pszCursorArray[SIZE_CURSOR_ARRAY]; extern THEME_FALLBACK_VALUES s_ThemeSoundsValues[SIZE_SOUNDS_ARRAY]; HRESULT CThemeFile_CreateInstance(IN LPCWSTR pszThemeFile, OUT ITheme ** ppTheme); class CThemeFile : public CImpIDispatch , public CObjectWithSite , public ITheme , public IPropertyBag { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); // *** IPropertyBag *** virtual STDMETHODIMP Read(IN LPCOLESTR pszPropName, IN VARIANT * pVar, IN IErrorLog *pErrorLog); virtual STDMETHODIMP Write(IN LPCOLESTR pszPropName, IN VARIANT *pVar); // *** ITheme *** virtual STDMETHODIMP get_DisplayName(OUT BSTR * pbstrDisplayName); virtual STDMETHODIMP put_DisplayName(IN BSTR bstrDisplayName); virtual STDMETHODIMP get_Background(OUT BSTR * pbstrPath); virtual STDMETHODIMP put_Background(IN BSTR bstrPath); virtual STDMETHODIMP get_BackgroundTile(OUT enumBkgdTile * pnTile); virtual STDMETHODIMP put_BackgroundTile(IN enumBkgdTile nTile); virtual STDMETHODIMP get_ScreenSaver(OUT BSTR * pbstrPath); virtual STDMETHODIMP put_ScreenSaver(IN BSTR bstrPath); virtual STDMETHODIMP get_VisualStyle(OUT BSTR * pbstrPath); virtual STDMETHODIMP put_VisualStyle(IN BSTR bstrPath); virtual STDMETHODIMP get_VisualStyleColor(OUT BSTR * pbstrPath); virtual STDMETHODIMP put_VisualStyleColor(IN BSTR bstrPath); virtual STDMETHODIMP get_VisualStyleSize(OUT BSTR * pbstrPath); virtual STDMETHODIMP put_VisualStyleSize(IN BSTR bstrPath); virtual STDMETHODIMP GetPath(IN VARIANT_BOOL fExpand, OUT BSTR * pbstrPath); virtual STDMETHODIMP SetPath(IN BSTR bstrPath); virtual STDMETHODIMP GetCursor(IN BSTR bstrCursor, OUT BSTR * pbstrPath); virtual STDMETHODIMP SetCursor(IN BSTR bstrCursor, IN BSTR bstrPath); virtual STDMETHODIMP GetSound(IN BSTR bstrSoundName, OUT BSTR * pbstrPath); virtual STDMETHODIMP SetSound(IN BSTR bstrSoundName, IN BSTR bstrPath); virtual STDMETHODIMP GetIcon(IN BSTR bstrIconName, OUT BSTR * pbstrIconPath); virtual STDMETHODIMP SetIcon(IN BSTR bstrIconName, IN BSTR bstrIconPath); // *** IDispatch *** virtual STDMETHODIMP GetTypeInfoCount(UINT *pctinfo) { return CImpIDispatch::GetTypeInfoCount(pctinfo); } virtual STDMETHODIMP GetTypeInfo(UINT itinfo,LCID lcid,ITypeInfo **pptinfo) { return CImpIDispatch::GetTypeInfo(itinfo, lcid, pptinfo); } virtual STDMETHODIMP GetIDsOfNames(REFIID riid,OLECHAR **rgszNames,UINT cNames, LCID lcid, DISPID * rgdispid) { return CImpIDispatch::GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid); } virtual STDMETHODIMP Invoke(DISPID dispidMember,REFIID riid,LCID lcid,WORD wFlags, DISPPARAMS * pdispparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo,UINT * puArgErr) { return CImpIDispatch::Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); } private: CThemeFile(LPCTSTR pszThemeFile); virtual ~CThemeFile(void); // Private Member Variables long m_cRef; LPTSTR m_pszThemeFile; DWORD m_dwCachedState; // Have we cached the state yet? SYSTEMMETRICSALL m_systemMetrics; // This is the system metrics attributes in the file // Private Member Functions HRESULT _getThemeSetting(IN LPCWSTR pszIniSection, IN LPCWSTR pszIniKey, DWORD dwFlags, OUT BSTR * pbstrPath); HRESULT _putThemeSetting(IN LPCWSTR pszIniSection, IN LPCWSTR pszIniKey, BOOL fUTF7, IN LPWSTR pszPath); HRESULT _getIntSetting(IN LPCWSTR pszIniSection, IN LPCWSTR pszIniKey, int nDefault, OUT int * pnValue); HRESULT _putIntSetting(IN LPCWSTR pszIniSection, IN LPCWSTR pszIniKey, IN int nValue); HRESULT _LoadLiveSettings(int * pnDPI); // Load the settings in memory HRESULT _LoadSettings(void); // Load the settings in the .theme file. HRESULT _ApplyThemeSettings(void); HRESULT _ApplySounds(void); HRESULT _ApplyCursors(void); HRESULT _ApplyWebview(void); HRESULT _GetSound(LPCWSTR pszSoundName, OUT BSTR * pbstrPath); HRESULT _SaveSystemMetrics(SYSTEMMETRICSALL * pSystemMetrics); HRESULT _LoadCustomFonts(void); HRESULT _GetCustomFont(LPCTSTR pszFontName, LOGFONT * pLogFont); HRESULT _getThemeSetting(IN LPCWSTR pszIniSection, IN LPCWSTR pszIniKey, OUT BSTR * pbstrPath); BOOL _IsFiltered(IN DWORD dwFilter); BOOL _IsCached(IN BOOL fLoading); // Friend Functions friend HRESULT CThemeFile_CreateInstance(IN LPCWSTR pszThemeFile, OUT ITheme ** ppTheme); }; #endif // _FILE_H_THEMEFILE