/**************************************************************************\
    FILE: Theme.idl
    DATE: BryanSt (3/31/2000)

    DESCRIPTION:
        Theme API (Object Model).

    Copyright (c) Microsoft Corporation. All rights reserved.
\**************************************************************************/

cpp_quote("#ifndef _THEMEIDL_IDL_H_")
cpp_quote("#define _THEMEIDL_IDL_H_")

midl_pragma warning( disable: 2400 )


//--------------------------------------------------------------------------
// 
//--------------------------------------------------------------------------
import "oaidl.idl";
import "ocidl.idl";
import "objidl.idl";
import "dimm.idl";      // They go thru all the pain of definiting LOGFONTW in an IDL acceptable way. (wingdi.h won't work here)

#include <olectl.h>

//--------------------------------------------------------------------------
// Includes
//--------------------------------------------------------------------------
#include "ThemeID.h"


//--------------------------------------------------------------------------
// Dependencies
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Interfaces
//--------------------------------------------------------------------------

 
//--------------------------------------------------------------------------
// Script Interfaces
//--------------------------------------------------------------------------



//--------------------------------------------------------------------------
// Themes Type Library
//--------------------------------------------------------------------------
[
    uuid(40643250-8D23-47fb-895C-EAF48E2C8892),         // LIBID_Theme
    helpstring("Microsoft Theme API Type Library"),
    lcid(0x0000),
    version(1.0)
]
library Theme
{
    //----------------------------------------------------------------------
    // Standard Type Library Stuff
    //----------------------------------------------------------------------
    importlib("stdole2.tlb");

    interface ITheme;
    interface IThemeScheme;
    interface IThemeStyle;
    interface IThemeSize;

    cpp_quote("#ifndef __LPTHEMEMANAGER_DEFINED")
    cpp_quote("#define __LPTHEMEMANAGER_DEFINED")

    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//   This object will allow users to view what 'Visual Style' or")
    cpp_quote("//'Color Scheme' or 'Appearance Scheme' is set.  This will appear")
    cpp_quote("//in the Display Control Panel under the Theme or Appearance tab.")
    cpp_quote("//")
    cpp_quote("//DEFINITIONS:")
    cpp_quote("//   Theme: This is a .theme plus! pack file.  The display control")
    cpp_quote("//          panel can change these on the Themes tab.")
    cpp_quote("//   Scheme: This is a visual style (.mstheme file) or it can indicate")
    cpp_quote("//          that no visual style is selected.")
    cpp_quote("//   Style: If Scheme is a .mstheme file, then this is the color section in that file.")
    cpp_quote("//          Otherwise, this is the 'Appearance Scheme' which was available")
    cpp_quote("//          in previous versions of Windows.")
    cpp_quote("//   Size:  This is the size of the Style, normally 'Normal', 'Large', or 'Extra Large'.")
    cpp_quote("//")
    cpp_quote("//METHODS:")
    cpp_quote("//   get_SelectedTheme: This method will return the currently selected .theme file.")
    cpp_quote("//   put_SelectedTheme: This method will set the currently selected .theme file.")
    cpp_quote("//               The change will not take effect until ApplyNow() is called.")
    cpp_quote("//   get_SelectedScheme: This method will return the currently selected .mstheme file.")
    cpp_quote("//   put_SelectedScheme: This method will set the currently selected .mstheme file.")
    cpp_quote("//               The change will not take effect until ApplyNow() is called.")
    cpp_quote("//   get_length: Returns the number of installed .theme files.")
    cpp_quote("//   get_item: Returns an installed Theme object.  The lookup can happen by index")
    cpp_quote("//               or filename.")
    cpp_quote("//   get_schemeLength: Returns the number of installed .mstheme files.")
    cpp_quote("//   get_schemeItem: Returns an installed .mstheme object.  The lookup can happen by index")
    cpp_quote("//               or filename.  The zero (0) index or empty VT_BSTR value points to the")
    cpp_quote("//               'No .mstheme' object which matches the 'Windows Classic' look with no .mstheme.")
    cpp_quote("//   ApplyNow: Apply the changes made to put_SelectedTheme() or put_SelectedScheme().")
    cpp_quote("//               This includes persisting the change and broadcasting the change to running applications.")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Manager Interface"),
        uuid(04D5D56C-EEAF-4419-B786-300284D6BB5F),        // IID_IThemeManager
    ]
    interface IThemeManager : IDispatch
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] IThemeManager *LPTHEMEMANAGER;      // For C callers

        cpp_quote("// These are the names of the Special Themes for GetSpecialTheme()/SetSpecialTheme()")
        cpp_quote("#define SZ_STDEFAULTTHEME            L\"DefaultTheme\"                // This is what the installer determines is most appropriate for the user.")

        cpp_quote("// These are the names of the Special Scheme for GetSpecialScheme()/SetSpecialScheme()")
        cpp_quote("#define SZ_SSDEFAULVISUALSTYLEON     L\"DefaultVisualStyleOn\"        // This is what the installer determines is most appropriate for the user with visual styles on.")
        cpp_quote("#define SZ_SSDEFAULVISUALSTYLEOFF    L\"DefaultVisualStyleOff\"       // This is what the installer determines is most appropriate for the user with visual styles off.")

        cpp_quote("// These are the names of the properties for GetSelectedSchemeProperty()")
        cpp_quote("#define SZ_CSP_PATH                  L\"Path\"                        // This is the directory containing the currently selected .mstheme file.")
        cpp_quote("#define SZ_CSP_FILE                  L\"File\"                        // This is the path including the filename to the currently selected .mstheme file.")
        cpp_quote("#define SZ_CSP_DISPLAYNAME           L\"DisplayName\"                 // This is the display name of the currently selected scheme.")
        cpp_quote("#define SZ_CSP_CANONICALNAME         L\"Name\"                        // This is the canonical name of the currently selected scheme.")
        cpp_quote("#define SZ_CSP_COLOR                 L\"Color\"                       // This is the color name of the currently selected scheme.")
        cpp_quote("#define SZ_CSP_SIZE                  L\"Size\"                        // This is the canonical size name of the currently selected scheme.")

        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        [id(DISPIDTHTM_LENGTH), propget, SZ_HELPTHTM_GETLENGTH, displaybind, bindable] HRESULT length([retval, out] long * pnLength);
        [id(DISPIDTHTM_ITEM), propget, SZ_HELPTHTM_GETITEM, displaybind, bindable] HRESULT item([in] VARIANT varIndex, [retval, out] ITheme ** ppTheme);
        [id(DISPIDTHTM_SCHEMELENGTH), propget, SZ_HELPTHTM_GETSCHEMELENGTH, displaybind, bindable] HRESULT schemeLength([retval, out] long * pnLength);
        [id(DISPIDTHTM_SCHEMEITEM), propget, SZ_HELPTHTM_GETSCHEMEITEM, displaybind, bindable] HRESULT schemeItem([in] VARIANT varIndex, [retval, out] IThemeScheme ** ppThemeScheme);
        [id(DISPIDTHTM_WEBVIEWCSS), propget, SZ_HELPTHTM_WEBVIEWCSS, displaybind, bindable] HRESULT WebviewCSS([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTM_CURRENTTHEME), propget, SZ_HELPTHTM_GETCURRENTTHEME, displaybind, bindable] HRESULT SelectedTheme([retval, out] ITheme ** ppTheme);
        [id(DISPIDTHTM_CURRENTTHEME), propput, SZ_HELPTHTM_PUTCURRENTTHEME, displaybind, bindable] HRESULT SelectedTheme([in] ITheme * pTheme);
        [id(DISPIDTHTM_SELECTEDSCHEME), propget, SZ_HELPTHTM_GETSELECTEDSCHEME, displaybind, bindable] HRESULT SelectedScheme([retval, out] IThemeScheme ** ppThemeScheme);
        [id(DISPIDTHTM_SELECTEDSCHEME), propput, SZ_HELPTHTM_PUTSELECTEDSCHEME, displaybind, bindable] HRESULT SelectedScheme([in] IThemeScheme * pThemeScheme);

        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHTM_GETSPECIALTHEME), SZ_HELPTHTM_GETSPECIALTHEME, displaybind] HRESULT GetSpecialTheme([in] BSTR bstrName, [retval, out] ITheme ** ppTheme);
        [id(DISPIDTHTM_SETSPECIALTHEME), SZ_HELPTHTM_SETSPECIALTHEME, displaybind] HRESULT SetSpecialTheme([in] BSTR bstrName, [in] ITheme * pTheme);
        [id(DISPIDTHTM_GETSPECIALSCHEME), SZ_HELPTHTM_GETSPECIALSCHEME, displaybind] HRESULT GetSpecialScheme([in] BSTR bstrName, [out] IThemeScheme ** ppThemeScheme, [out] IThemeStyle ** ppThemeStyle, [retval, out] IThemeSize ** ppThemeSize);
        [id(DISPIDTHTM_SETSPECIALSCHEME), SZ_HELPTHTM_SETSPECIALSCHEME, displaybind] HRESULT SetSpecialScheme([in] BSTR bstrName, [in] IThemeScheme * pThemeScheme, [in] IThemeStyle * pThemeStyle, [in] IThemeSize * pThemeSize);
        [id(DISPIDTHTM_GETSELSCHPROPERTY), SZ_HELPTHTM_GETSELSCHPROPERTY, displaybind] HRESULT GetSelectedSchemeProperty([in] BSTR bstrName, [retval, out] BSTR * pbstrValue);
        [id(DISPIDTHTM_APPLYNOW), SZ_HELPTHTM_APPLYNOW, displaybind] HRESULT ApplyNow(void);
    }
    cpp_quote("#endif //  __LPTHEMEMANAGER_DEFINED")

    //----------------------------------------------------------------------
    // AutoDiscover Accounts Class
    //----------------------------------------------------------------------
    [
        uuid(2E17C0EF-2851-459b-A3C8-27A41D4BC9F7),     // CLSID_ThemeManager
        helpstring("Theme Manager Class"),
    ]
    coclass ThemeManager
    {
        [default] interface IThemeManager;
    };




    cpp_quote("#ifndef __LPTHEME_DEFINED")
    cpp_quote("#define __LPTHEME_DEFINED")
    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//GetIcon: The first parameter will specify the icon to fetch.  The format")
    cpp_quote("//         will be: <RegKey>:<IconType>  An example for the recycle bin is:")
    cpp_quote("//         CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon::empty")
    cpp_quote("//         The value returned with be the path to the icon file, a comma, and")
    cpp_quote("//         the icon resource index.  For example: C:\windows\file.dll,12")
    cpp_quote("//")
    cpp_quote("//METHODS:")
    cpp_quote("//DisplayName: The display name maybe point to a resource in order to be MUI")
    cpp_quote("//         compatible.  For example, '@themeui.dll,-172'.")
    cpp_quote("//Background: This is the path to the background wallpaper.")
    cpp_quote("//BackgroundTile: This will indicate if the wallpaper should be tiled, stretched, or centered.")
    cpp_quote("//ScreenSaver: The path to the screen saver.")
    cpp_quote("//VisualStyle: The path to the .mstheme visual style file.")
    cpp_quote("//VisualStyleColor: The color to choose in the .mstheme file.")
    cpp_quote("//VisualStyleSize: The size to choose in the .mstheme file.")
    cpp_quote("//get_GetPath: The path to the theme (.theme file).")
    cpp_quote("//SetIcon: The path and resource index of the icon.  The")
    cpp_quote("//         following example will be for the Recycle Bin in the empty state:")
    cpp_quote("//         bstrIconName = CLSID\\{645FF040-5081-101B-9F08-00AA002F954E}\\DefaultIcon:empty")
    cpp_quote("//         bstrIconPath = C:\winnt\SYSTEM32\shell32.dll,31")
    cpp_quote("//")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Interface"),
        uuid(A41C22EB-0F93-40ae-B7CE-37A4C4C81B01),        // IID_ITheme
    ]
    interface ITheme : IDispatch
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] ITheme *LPTHEME;      // For C callers

        cpp_quote("// ITheme::get_BackgroundTile() Tiles")
        typedef enum
        {
            BKDGT_CENTER = 0,               // Center the image on the screen
            BKDGT_TILE,                     // Tile the image on the screen
            BKDGT_STRECH                    // Stretch the image to fit on the screen
        } enumBkgdTile;


        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        // General Properties
        [id(DISPIDTHTH_DISPLAYNAME), propget, SZ_HELPTHTH_GETDISPLAYNAME, displaybind, bindable] HRESULT DisplayName([retval, out] BSTR * pbstrDisplayName); // Appears in "Look & Feel"
        [id(DISPIDTHTH_DISPLAYNAME), propput, SZ_HELPTHTH_PUTDISPLAYNAME, displaybind, bindable] HRESULT DisplayName([in] BSTR bstrDisplayName);

        // Plus! Uber Theme Properties
        [id(DISPIDTHTH_BKGD), propget, SZ_HELPTHTH_GETBKGD, displaybind, bindable] HRESULT Background([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_BKGD), propput, SZ_HELPTHTH_PUTBKGD, displaybind, bindable] HRESULT Background([in] BSTR bstrPath);
        [id(DISPIDTHTH_BKGDTILE), propget, SZ_HELPTHTH_GETBKGDTILE, displaybind, bindable] HRESULT BackgroundTile([retval, out] enumBkgdTile * pnTile);
        [id(DISPIDTHTH_BKGDTILE), propput, SZ_HELPTHTH_PUTBKGDTILE, displaybind, bindable] HRESULT BackgroundTile([in] enumBkgdTile nTile);
        [id(DISPIDTHTH_SCRNSAVER), propget, SZ_HELPTHTH_GETSCRNSAVER, displaybind, bindable] HRESULT ScreenSaver([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_SCRNSAVER), propput, SZ_HELPTHTH_PUTSCRNSAVER, displaybind, bindable] HRESULT ScreenSaver([in] BSTR bstrPath);
        [id(DISPIDTHTH_VS), propget, SZ_HELPTHTH_GETVS, displaybind, bindable] HRESULT VisualStyle([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_VS), propput, SZ_HELPTHTH_PUTVS, displaybind, bindable] HRESULT VisualStyle([in] BSTR bstrPath);
        [id(DISPIDTHTH_VSCOLOR), propget, SZ_HELPTHTH_GETVSCOLOR, displaybind, bindable] HRESULT VisualStyleColor([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_VSCOLOR), propput, SZ_HELPTHTH_PUTVSCOLOR, displaybind, bindable] HRESULT VisualStyleColor([in] BSTR bstrPath);
        [id(DISPIDTHTH_VSSIZE), propget, SZ_HELPTHTH_GETVSSIZE, displaybind, bindable] HRESULT VisualStyleSize([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_VSSIZE), propput, SZ_HELPTHTH_PUTVSSIZE, displaybind, bindable] HRESULT VisualStyleSize([in] BSTR bstrPath);


        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHTH_GETPATH), SZ_HELPTHTH_GETPATH, displaybind] HRESULT GetPath([in] VARIANT_BOOL fExpand, [retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_SETPATH), SZ_HELPTHTH_PUTPATH, displaybind] HRESULT SetPath([in] BSTR bstrPath);
        [id(DISPIDTHTH_GETCURSOR), SZ_HELPTHTH_GETCURSOR, displaybind] HRESULT GetCursor([in] BSTR bstrCursor, [retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_SETCURSOR), SZ_HELPTHTH_PUTCURSOR, displaybind] HRESULT SetCursor([in] BSTR bstrCursor, [in] BSTR bstrPath);
        [id(DISPIDTHTH_GETSOUND), SZ_HELPTHTH_GETSOUND, displaybind] HRESULT GetSound([in] BSTR bstrSoundName, [retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTH_SETSOUND), SZ_HELPTHTH_PUTSOUND, displaybind] HRESULT SetSound([in] BSTR bstrSoundName, [in] BSTR bstrPath);
        [id(DISPIDTHTH_GETICON), SZ_HELPTHTH_GETICON, displaybind] HRESULT GetIcon([in] BSTR bstrIconName, [retval, out] BSTR * pbstrIconPath);
        [id(DISPIDTHTH_SETICON), SZ_HELPTHTH_PUTICON, displaybind] HRESULT SetIcon([in] BSTR bstrIconName, [in] BSTR bstrIconPath);
    }
    cpp_quote("#endif //  __LPTHEME_DEFINED")

    //----------------------------------------------------------------------
    // Theme Class
    //----------------------------------------------------------------------
    [
        uuid(F60691B4-3BD8-4f42-B2FD-20853C433A74),     // CLSID_Theme
        helpstring("Theme Class"),
    ]
    coclass Theme
    {
        [default] interface ITheme;
    };


    cpp_quote("#ifndef __LPTHEMESCHEME_DEFINED")
    cpp_quote("#define __LPTHEMESCHEME_DEFINED")
    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Scheme Interface"),
        uuid(AA49D906-65B2-42d6-A26A-2EE03C83F839),        // IID_IThemeScheme
    ]
    interface IThemeScheme : IDispatch
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] IThemeScheme *LPTHEMESCHEME;      // For C callers

        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        // General Properties
        [id(DISPIDTHTS_SCHDISPNAME), propget, SZ_HELPTHTS_GETSCHDISPNAME, displaybind, bindable] HRESULT DisplayName([retval, out] BSTR * pbstrDisplayName);
        [id(DISPIDTHTS_SCHDISPNAME), propput, SZ_HELPTHTS_PUTSCHDISPNAME, displaybind, bindable] HRESULT DisplayName([in] BSTR bstrDisplayName);
        [id(DISPIDTHTS_SCHEMEPATH), propget, SZ_HELPTHTS_GETSCHEMEPATH, displaybind, bindable] HRESULT Path([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHTS_SCHEMEPATH), propput, SZ_HELPTHTS_PUTSCHEMEPATH, displaybind, bindable] HRESULT Path([in] BSTR bstrPath);

        // Style Collection
        [id(DISPIDTHTS_LENGTH), propget, SZ_HELPTHTS_GETLENGTH, displaybind, bindable] HRESULT length([retval, out] long * pnLength);
        [id(DISPIDTHTS_ITEM), propget, SZ_HELPTHTS_GETITEM, displaybind, bindable] HRESULT item([in] VARIANT varIndex, [retval, out] IThemeStyle ** ppThemeStyle);
        [id(DISPIDTHTS_SELECTEDSTYLE), propget, SZ_HELPTHTS_GETSELECTEDSTYLE, displaybind, bindable] HRESULT SelectedStyle([retval, out] IThemeStyle ** ppThemeStyle);
        [id(DISPIDTHTS_SELECTEDSTYLE), propput, SZ_HELPTHTS_PUTSELECTEDSTYLE, displaybind, bindable] HRESULT SelectedStyle([in] IThemeStyle * pThemeStyle);

        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHTS_ADDSTYLE), SZ_HELPTHTS_ADDSTYLE, displaybind] HRESULT AddStyle([retval, out] IThemeStyle ** ppThemeStyle);
    }
    cpp_quote("#endif //  __LPTHEMESCHEME_DEFINED")

    //----------------------------------------------------------------------
    // ThemeScheme Accounts Class
    //----------------------------------------------------------------------
    [
        uuid(1C995F92-244F-48ac-9784-4AF9586EBBBA),     // CLSID_ThemeScheme
        helpstring("ThemeScheme Class"),
    ]
    coclass ThemeScheme
    {
        [default] interface IThemeScheme;
    };




    cpp_quote("#ifndef __LPTHEMESTYLE_DEFINED")
    cpp_quote("#define __LPTHEMESTYLE_DEFINED")
    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Style Interface"),
        uuid(3672E804-D69D-43d8-AF58-F320B8D9AF32),        // IID_IThemeStyle
    ]
    interface IThemeStyle : IDispatch
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] IThemeStyle *LPTHEMESTYLE;      // For C callers

        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        // General Properties
        [id(DISPIDTHSY_DISPNAME), propget, SZ_HELPTHSY_GETDISPNAME, displaybind, bindable] HRESULT DisplayName([retval, out] BSTR * pbstrDisplayName);
        [id(DISPIDTHSY_DISPNAME), propput, SZ_HELPTHSY_PUTDISPNAME, displaybind, bindable] HRESULT DisplayName([in] BSTR bstrDisplayName);
        [id(DISPIDTHSY_NAME), propget, SZ_HELPTHSY_GETNAME, displaybind, bindable] HRESULT Name([retval, out] BSTR * pbstrName);
        [id(DISPIDTHSY_NAME), propput, SZ_HELPTHSY_PUTNAME, displaybind, bindable] HRESULT Name([in] BSTR bstrName);
        [id(DISPIDTHSY_LENGTH), propget, SZ_HELPTHSY_GETLENGTH, displaybind, bindable] HRESULT length([retval, out] long * pnLength);
        [id(DISPIDTHSY_ITEM), propget, SZ_HELPTHSY_GETITEM, displaybind, bindable] HRESULT item([in] VARIANT varIndex, [retval, out] IThemeSize ** ppThemeSize);
        [id(DISPIDTHSY_SELECTEDSIZE), propget, SZ_HELPTHSY_GETSELECTEDSIZE, displaybind, bindable] HRESULT SelectedSize([retval, out] IThemeSize ** ppThemeSize);
        [id(DISPIDTHSY_SELECTEDSIZE), propput, SZ_HELPTHSY_PUTSELECTEDSIZE, displaybind, bindable] HRESULT SelectedSize([in] IThemeSize * pThemeSize);

        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHSY_ADDSIZE), SZ_HELPTHSY_ADDSIZE, displaybind] HRESULT AddSize([retval, out] IThemeSize ** ppThemeSize);
    }
    cpp_quote("#endif //  __LPTHEMESTYLE_DEFINED")

    //----------------------------------------------------------------------
    // ThemeStyle Accounts Class
    //----------------------------------------------------------------------
    [
        uuid(AFCEFAC8-8097-4ee5-82DF-121202D95342),     // CLSID_ThemeStyle
        helpstring("ThemeStyle Class"),
    ]
    coclass ThemeStyle
    {
        [default] interface IThemeStyle;
    };



    cpp_quote("#ifndef __LPTHEMESIZES_DEFINED")
    cpp_quote("#define __LPTHEMESIZES_DEFINED")
    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Size Interface"),
        uuid(72DD2E7F-21E5-46dc-8847-CDDCF58B6725),        // IID_IThemeSize
    ]
    interface IThemeSize : IDispatch
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] IThemeSize *LPTHEMESIZES;      // For C callers

        cpp_quote("// IThemeSize::SystemMetricFont() Fonts")
        typedef enum
        {
            SMF_CAPTIONFONT = 0,            // NONCLIENTMETRICSW.lfCaptionFont
            SMF_SMCAPTIONFONT,              // NONCLIENTMETRICSW.lfSmCaptionFont
            SMF_MENUFONT,                   // NONCLIENTMETRICSW.lfMenuFont
            SMF_ICONTITLEFONT,               // For SPI_GETICONTITLELOGFONT
            SMF_STATUSFONT,                 // NONCLIENTMETRICSW.lfStatusFont
            SMF_MESSAGEFONT,                 // NONCLIENTMETRICSW.lfMessageFont
        } enumSystemMetricFont;

        cpp_quote("// IThemeSize::SystemMetricSize() Sizes")
        typedef enum
        {
            SMS_BORDERWIDTH = 0,            // NONCLIENTMETRICSW.iBorderWidth
            SMS_SCROLLWIDTH,                // NONCLIENTMETRICSW.iScrollWidth
            SMS_SCROLLHEIGHT,               // NONCLIENTMETRICSW.iScrollHeight
            SMS_CAPTIONWIDTH,               // NONCLIENTMETRICSW.iCaptionWidth
            SMS_CAPTIONHEIGHT,              // NONCLIENTMETRICSW.iCaptionHeight
            SMS_SMCAPTIONWIDTH,             // NONCLIENTMETRICSW.iSmCaptionWidth
            SMS_SMCAPTIONHEIGHT,            // NONCLIENTMETRICSW.iSmCaptionHeight
            SMS_MENUWIDTH,                  // NONCLIENTMETRICSW.iMenuWidth
            SMS_MENUHEIGHT                  // NONCLIENTMETRICSW.iMenuHeight
        } enumSystemMetricSize;

        cpp_quote("// IThemeSize::get_/put_ContrastLevel() Contrast Levels")
        typedef enum
        {
                // Media types
            CONTRAST_NORMAL             = 0x00000000,       // Normal Contrast.
            CONTRAST_HIGHBLACK          = 0x00000001,       // High Contrast.  Use black or dark colors for backgrounds.
            CONTRAST_HIGHWHITE          = 0x00000002,       // High Contrast.  Use white or light colors for backgrounds.
        } enumThemeContrastLevels;


        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        // General Properties
        [id(DISPIDTHSZ_DISPNAME), propget, SZ_HELPTHSZ_GETDISPNAME, displaybind, bindable] HRESULT DisplayName([retval, out] BSTR * pbstrDisplayName);
        [id(DISPIDTHSZ_DISPNAME), propput, SZ_HELPTHSZ_PUTDISPNAME, displaybind, bindable] HRESULT DisplayName([in] BSTR bstrDisplayName);
        [id(DISPIDTHSZ_NAME), propget, SZ_HELPTHSZ_GETNAME, displaybind, bindable] HRESULT Name([retval, out] BSTR * pbstrName);
        [id(DISPIDTHSZ_NAME), propput, SZ_HELPTHSZ_PUTNAME, displaybind, bindable] HRESULT Name([in] BSTR bstrName);
        [id(DISPIDTHSZ_SYSMETCOLOR), propget, SZ_HELPTHSZ_GETSYSMETCOLOR, displaybind, bindable] HRESULT SystemMetricColor([in] int nSysColorIndex, [retval, out] COLORREF * pColorRef);
        [id(DISPIDTHSZ_SYSMETCOLOR), propput, SZ_HELPTHSZ_PUTSYSMETCOLOR, displaybind, bindable] HRESULT SystemMetricColor([in] int nSysColorIndex, [in] COLORREF ColorRef);
        [id(DISPIDTHSZ_SYSMETSIZE), propget, SZ_HELPTHSZ_GETSYSMETSIZE, displaybind, bindable] HRESULT SystemMetricSize([in] enumSystemMetricSize nSystemMetricIndex, [retval, out] int * pnSize);
        [id(DISPIDTHSZ_SYSMETSIZE), propput, SZ_HELPTHSZ_PUTSYSMETSIZE, displaybind, bindable] HRESULT SystemMetricSize([in] enumSystemMetricSize nSystemMetricIndex, [in] int nSize);
        [id(DISPIDTHSZ_WEBVIEWCSS), propget, SZ_HELPTHSZ_WEBVIEWCSS, displaybind, bindable] HRESULT WebviewCSS([retval, out] BSTR * pbstrPath);
        [id(DISPIDTHSZ_CONTRASTLVL), propget, SZ_HELPTHSZ_GETCONTRASTLVL, displaybind, bindable] HRESULT ContrastLevel([retval, out] enumThemeContrastLevels * pContrastLevel);
        [id(DISPIDTHSZ_CONTRASTLVL), propput, SZ_HELPTHSZ_PUTCONTRASTLVL, displaybind, bindable] HRESULT ContrastLevel([in] enumThemeContrastLevels ContrastLevel);

        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHSZ_GETSYSMETFONT), SZ_HELPTHSZ_GETSYSMETFONT, displaybind] HRESULT GetSystemMetricFont([in] enumSystemMetricFont nFontIndex, [in] LOGFONTW * pLogFontW);
        [id(DISPIDTHSZ_PUTSYSMETFONT), SZ_HELPTHSZ_PUTSYSMETFONT, displaybind] HRESULT PutSystemMetricFont([in] enumSystemMetricFont nFontIndex, [in] LOGFONTW * pLogFontW);
    }
    cpp_quote("#endif //  __LPTHEMESIZES_DEFINED")

    //----------------------------------------------------------------------
    // ThemeSize Accounts Class
    //----------------------------------------------------------------------
    [
        uuid(05AF76AC-4245-468f-AE35-6D233436937A),     // CLSID_ThemeSize
        helpstring("ThemeSize Class"),
    ]
    coclass ThemeSize
    {
        [default] interface IThemeSize;
    };




    cpp_quote("#ifndef __LPTHEMEPREVIEW_DEFINED")
    cpp_quote("#define __LPTHEMEPREVIEW_DEFINED")
    cpp_quote("//===================================================================")
    cpp_quote("//DESCRIPTION:")
    cpp_quote("//===================================================================")
    [
        object,
        oleautomation,
        dual,
        nonextensible,
        helpstring("Theme Preview Interface"),
        uuid(b63705f2-b2a2-401e-a20d-643e6b554a1d),        // IID_IThemePreview
    ]
    interface IThemePreview : IUnknown
    {
        //------------------------------------------------------------------
        // Pointer to an interface of this type
        //------------------------------------------------------------------
        typedef [unique] IThemePreview *LPTHEMEPREVIEW;      // For C callers

        cpp_quote("// IThemePreview::CreatePreview() dwFlags")
        typedef enum
        {
            // Media types
            TMPREV_NONE        = 0x00000000,
            TMPREV_SHOWMONITOR = 0x00000001,
            TMPREV_SHOWBKGND   = 0x00000002,
            TMPREV_SHOWVS      = 0x00000004,
            TMPREV_SHOWICONS   = 0x00000008
        } enumThemePreviewFlags;

        //------------------------------------------------------------------
        // Properties
        //------------------------------------------------------------------
        // General Properties

        //------------------------------------------------------------------
        // Methods
        //------------------------------------------------------------------
        [id(DISPIDTHPV_UPDATE), SZ_HELPTHPV_UPDATE, displaybind] HRESULT UpdatePreview([in] IPropertyBag * pPropertyBag);
        [id(DISPIDTHPV_CREATEPREVIEW), SZ_HELPTHPV_CREATEPREVIEW, displaybind] HRESULT CreatePreview([in] HWND hwndParent, [in] DWORD dwFlags, [in] DWORD dwStyle, [in] DWORD dwExStyle, [in] int x, [in] int y, [in] int nWidth, [in] int nHeight, [in] IPropertyBag * pPropertyBag, [in] DWORD dwCtrlID);
    }
    cpp_quote("#endif //  __LPTHEMEPREVIEW_DEFINED")

    //----------------------------------------------------------------------
    // ThemePreview Accounts Class
    //----------------------------------------------------------------------
    [
        uuid(B7BBD408-F09C-4aa8-B65E-A00B8FE0F0B9),     // CLSID_ThemePreview
        helpstring("ThemePreview Class"),
    ]
    coclass ThemePreview
    {
        [default] interface IThemePreview;
    };
} // Themes Type Library


cpp_quote("#endif // _THEMEIDL_IDL_H_")
