/*** Autogenerated by WIDL 8.21 from include/windows.ui.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __windows_ui_h__
#define __windows_ui_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelper __x_ABI_CWindows_CUI_CIColorHelper;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelper ABI::Windows::UI::IColorHelper
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelper;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics ABI::Windows::UI::IColorHelperStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2 ABI::Windows::UI::IColorHelperStatics2
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics2;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColors __x_ABI_CWindows_CUI_CIColors;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColors ABI::Windows::UI::IColors
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColors;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorsStatics ABI::Windows::UI::IColorsStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorsStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContentRoot ABI::Windows::UI::IUIContentRoot
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContentRoot;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContext __x_ABI_CWindows_CUI_CIUIContext;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContext ABI::Windows::UI::IUIContext
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContext;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class ColorHelper;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CColorHelper __x_ABI_CWindows_CUI_CColorHelper;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class Colors;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CColors __x_ABI_CWindows_CUI_CColors;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class UIContentRoot;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CUIContentRoot __x_ABI_CWindows_CUI_CUIContentRoot;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class UIContext;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CUIContext __x_ABI_CWindows_CUI_CUIContext;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__ */

#ifndef ____FIIterable_1_Color_FWD_DEFINED__
#define ____FIIterable_1_Color_FWD_DEFINED__
typedef interface __FIIterable_1_Color __FIIterable_1_Color;
#ifdef __cplusplus
#define __FIIterable_1_Color ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_WindowId_FWD_DEFINED__
#define ____FIIterable_1_WindowId_FWD_DEFINED__
typedef interface __FIIterable_1_WindowId __FIIterable_1_WindowId;
#ifdef __cplusplus
#define __FIIterable_1_WindowId ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_Color_FWD_DEFINED__
#define ____FIIterator_1_Color_FWD_DEFINED__
typedef interface __FIIterator_1_Color __FIIterator_1_Color;
#ifdef __cplusplus
#define __FIIterator_1_Color ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_WindowId_FWD_DEFINED__
#define ____FIIterator_1_WindowId_FWD_DEFINED__
typedef interface __FIIterator_1_WindowId __FIIterator_1_WindowId;
#ifdef __cplusplus
#define __FIIterator_1_WindowId ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_WindowId_FWD_DEFINED__
#define ____FIVectorView_1_WindowId_FWD_DEFINED__
typedef interface __FIVectorView_1_WindowId __FIVectorView_1_WindowId;
#ifdef __cplusplus
#define __FIVectorView_1_WindowId ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIReference_1_Color_FWD_DEFINED__
#define ____FIReference_1_Color_FWD_DEFINED__
typedef interface __FIReference_1_Color __FIReference_1_Color;
#ifdef __cplusplus
#define __FIReference_1_Color ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __cplusplus
typedef struct __x_ABI_CWindows_CUI_CColor __x_ABI_CWindows_CUI_CColor;
#else /* __cplusplus */
namespace ABI {
    namespace Windows {
        namespace UI {
            typedef struct Color Color;
        }
    }
}
#endif /* __cplusplus */

#ifndef __cplusplus
typedef struct __x_ABI_CWindows_CUI_CWindowId __x_ABI_CWindows_CUI_CWindowId;
#else /* __cplusplus */
namespace ABI {
    namespace Windows {
        namespace UI {
            typedef struct WindowId WindowId;
        }
    }
}
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelper __x_ABI_CWindows_CUI_CIColorHelper;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelper ABI::Windows::UI::IColorHelper
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelper;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics ABI::Windows::UI::IColorHelperStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2 ABI::Windows::UI::IColorHelperStatics2
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics2;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColors __x_ABI_CWindows_CUI_CIColors;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColors ABI::Windows::UI::IColors
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColors;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorsStatics ABI::Windows::UI::IColorsStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorsStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContentRoot ABI::Windows::UI::IUIContentRoot
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContentRoot;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContext __x_ABI_CWindows_CUI_CIUIContext;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContext ABI::Windows::UI::IUIContext
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContext;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_Color_FWD_DEFINED__
#define ____FIIterable_1_Color_FWD_DEFINED__
typedef interface __FIIterable_1_Color __FIIterable_1_Color;
#ifdef __cplusplus
#define __FIIterable_1_Color ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_WindowId_FWD_DEFINED__
#define ____FIIterable_1_WindowId_FWD_DEFINED__
typedef interface __FIIterable_1_WindowId __FIIterable_1_WindowId;
#ifdef __cplusplus
#define __FIIterable_1_WindowId ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_Color_FWD_DEFINED__
#define ____FIIterator_1_Color_FWD_DEFINED__
typedef interface __FIIterator_1_Color __FIIterator_1_Color;
#ifdef __cplusplus
#define __FIIterator_1_Color ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_WindowId_FWD_DEFINED__
#define ____FIIterator_1_WindowId_FWD_DEFINED__
typedef interface __FIIterator_1_WindowId __FIIterator_1_WindowId;
#ifdef __cplusplus
#define __FIIterator_1_WindowId ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_WindowId_FWD_DEFINED__
#define ____FIVectorView_1_WindowId_FWD_DEFINED__
typedef interface __FIVectorView_1_WindowId __FIVectorView_1_WindowId;
#ifdef __cplusplus
#define __FIVectorView_1_WindowId ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIReference_1_Color_FWD_DEFINED__
#define ____FIReference_1_Color_FWD_DEFINED__
typedef interface __FIReference_1_Color __FIReference_1_Color;
#ifdef __cplusplus
#define __FIReference_1_Color ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            struct Color {
                BYTE A;
                BYTE R;
                BYTE G;
                BYTE B;
            };
        }
    }
}
extern "C" {
#else
struct __x_ABI_CWindows_CUI_CColor {
    BYTE A;
    BYTE R;
    BYTE G;
    BYTE B;
};
#ifdef WIDL_using_Windows_UI
#define Color __x_ABI_CWindows_CUI_CColor
#endif /* WIDL_using_Windows_UI */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xc0000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            struct WindowId {
                UINT64 Value;
            };
        }
    }
}
extern "C" {
#else
struct __x_ABI_CWindows_CUI_CWindowId {
    UINT64 Value;
};
#ifdef WIDL_using_Windows_UI
#define WindowId __x_ABI_CWindows_CUI_CWindowId
#endif /* WIDL_using_Windows_UI */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xc0000 */
/*****************************************************************************
 * IColorHelper interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelper, 0x193cfbe7, 0x65c7, 0x4540, 0xad,0x08, 0x62,0x83,0xba,0x76,0x87,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("193cfbe7-65c7-4540-ad08-6283ba76879a")
            IColorHelper : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelper, 0x193cfbe7, 0x65c7, 0x4540, 0xad,0x08, 0x62,0x83,0xba,0x76,0x87,0x9a)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelper *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelper *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperVtbl;

interface __x_ABI_CWindows_CUI_CIColorHelper {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelper_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelper_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelper* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelper_AddRef(__x_ABI_CWindows_CUI_CIColorHelper* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelper_Release(__x_ABI_CWindows_CUI_CIColorHelper* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetIids(__x_ABI_CWindows_CUI_CIColorHelper* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelper* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelper* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelper IID___x_ABI_CWindows_CUI_CIColorHelper
#define IColorHelperVtbl __x_ABI_CWindows_CUI_CIColorHelperVtbl
#define IColorHelper __x_ABI_CWindows_CUI_CIColorHelper
#define IColorHelper_QueryInterface __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface
#define IColorHelper_AddRef __x_ABI_CWindows_CUI_CIColorHelper_AddRef
#define IColorHelper_Release __x_ABI_CWindows_CUI_CIColorHelper_Release
#define IColorHelper_GetIids __x_ABI_CWindows_CUI_CIColorHelper_GetIids
#define IColorHelper_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName
#define IColorHelper_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorHelperStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelperStatics, 0x8504dbea, 0xfb6a, 0x4144, 0xa6,0xc2, 0x33,0x49,0x9c,0x92,0x84,0xf5);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("8504dbea-fb6a-4144-a6c2-33499c9284f5")
            IColorHelperStatics : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE FromArgb(
                    BYTE a,
                    BYTE r,
                    BYTE g,
                    BYTE b,
                    struct Color *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelperStatics, 0x8504dbea, 0xfb6a, 0x4144, 0xa6,0xc2, 0x33,0x49,0x9c,0x92,0x84,0xf5)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        TrustLevel *trustLevel);

    /*** IColorHelperStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *FromArgb)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        BYTE a,
        BYTE r,
        BYTE g,
        BYTE b,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl;

interface __x_ABI_CWindows_CUI_CIColorHelperStatics {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorHelperStatics methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb(This,a,r,g,b,value) (This)->lpVtbl->FromArgb(This,a,r,g,b,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef(__x_ABI_CWindows_CUI_CIColorHelperStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics_Release(__x_ABI_CWindows_CUI_CIColorHelperStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorHelperStatics methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,BYTE a,BYTE r,BYTE g,BYTE b,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->FromArgb(This,a,r,g,b,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelperStatics IID___x_ABI_CWindows_CUI_CIColorHelperStatics
#define IColorHelperStaticsVtbl __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl
#define IColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics
#define IColorHelperStatics_QueryInterface __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface
#define IColorHelperStatics_AddRef __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef
#define IColorHelperStatics_Release __x_ABI_CWindows_CUI_CIColorHelperStatics_Release
#define IColorHelperStatics_GetIids __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids
#define IColorHelperStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName
#define IColorHelperStatics_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel
#define IColorHelperStatics_FromArgb __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorHelperStatics2 interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelperStatics2, 0x24d9af02, 0x6eb0, 0x4b94, 0x85,0x5c, 0xfc,0xf0,0x81,0x8d,0x9a,0x16);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("24d9af02-6eb0-4b94-855c-fcf0818d9a16")
            IColorHelperStatics2 : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE ToDisplayName(
                    struct Color color,
                    HSTRING *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelperStatics2, 0x24d9af02, 0x6eb0, 0x4b94, 0x85,0x5c, 0xfc,0xf0,0x81,0x8d,0x9a,0x16)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        TrustLevel *trustLevel);

    /*** IColorHelperStatics2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ToDisplayName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        struct __x_ABI_CWindows_CUI_CColor color,
        HSTRING *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl;

interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorHelperStatics2 methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName(This,color,value) (This)->lpVtbl->ToDisplayName(This,color,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorHelperStatics2 methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,struct __x_ABI_CWindows_CUI_CColor color,HSTRING *value) {
    return This->lpVtbl->ToDisplayName(This,color,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelperStatics2 IID___x_ABI_CWindows_CUI_CIColorHelperStatics2
#define IColorHelperStatics2Vtbl __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl
#define IColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2
#define IColorHelperStatics2_QueryInterface __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface
#define IColorHelperStatics2_AddRef __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef
#define IColorHelperStatics2_Release __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release
#define IColorHelperStatics2_GetIids __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids
#define IColorHelperStatics2_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName
#define IColorHelperStatics2_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel
#define IColorHelperStatics2_ToDisplayName __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */

/*****************************************************************************
 * IColors interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColors, 0x9b8c9326, 0x4ca6, 0x4ce5, 0x89,0x94, 0x9e,0xff,0x65,0xca,0xbd,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("9b8c9326-4ca6-4ce5-8994-9eff65cabdcc")
            IColors : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColors, 0x9b8c9326, 0x4ca6, 0x4ce5, 0x89,0x94, 0x9e,0xff,0x65,0xca,0xbd,0xcc)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColors *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColors *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColors *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColors *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColors *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColors *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorsVtbl;

interface __x_ABI_CWindows_CUI_CIColors {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColors_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColors_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColors_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColors_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColors_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_QueryInterface(__x_ABI_CWindows_CUI_CIColors* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColors_AddRef(__x_ABI_CWindows_CUI_CIColors* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColors_Release(__x_ABI_CWindows_CUI_CIColors* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetIids(__x_ABI_CWindows_CUI_CIColors* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColors* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetTrustLevel(__x_ABI_CWindows_CUI_CIColors* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColors IID___x_ABI_CWindows_CUI_CIColors
#define IColorsVtbl __x_ABI_CWindows_CUI_CIColorsVtbl
#define IColors __x_ABI_CWindows_CUI_CIColors
#define IColors_QueryInterface __x_ABI_CWindows_CUI_CIColors_QueryInterface
#define IColors_AddRef __x_ABI_CWindows_CUI_CIColors_AddRef
#define IColors_Release __x_ABI_CWindows_CUI_CIColors_Release
#define IColors_GetIids __x_ABI_CWindows_CUI_CIColors_GetIids
#define IColors_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName
#define IColors_GetTrustLevel __x_ABI_CWindows_CUI_CIColors_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorsStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorsStatics, 0xcff52e04, 0xcca6, 0x4614, 0xa1,0x7e, 0x75,0x49,0x10,0xc8,0x4a,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("cff52e04-cca6-4614-a17e-754910c84a99")
            IColorsStatics : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE get_AliceBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_AntiqueWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Aqua(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Aquamarine(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Azure(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Beige(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Bisque(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Black(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BlanchedAlmond(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Blue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BlueViolet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Brown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BurlyWood(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_CadetBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Chartreuse(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Chocolate(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Coral(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_CornflowerBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Cornsilk(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Crimson(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Cyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkCyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGoldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkKhaki(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkMagenta(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOliveGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOrange(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOrchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSalmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkViolet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DeepPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DeepSkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DimGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DodgerBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Firebrick(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_FloralWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_ForestGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Fuchsia(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gainsboro(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_GhostWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gold(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Goldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Green(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_GreenYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Honeydew(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_HotPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_IndianRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Indigo(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Ivory(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Khaki(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Lavender(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LavenderBlush(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LawnGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LemonChiffon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightCoral(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightCyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGoldenrodYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSalmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSteelBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Lime(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LimeGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Linen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Magenta(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Maroon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumAquamarine(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumOrchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumPurple(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSpringGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumVioletRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MidnightBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MintCream(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MistyRose(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Moccasin(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_NavajoWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Navy(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OldLace(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Olive(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OliveDrab(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Orange(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OrangeRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Orchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleGoldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleVioletRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PapayaWhip(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PeachPuff(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Peru(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Pink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Plum(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PowderBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Purple(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Red(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_RosyBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_RoyalBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SaddleBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Salmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SandyBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SeaShell(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Sienna(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Silver(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Snow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SpringGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SteelBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Tan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Teal(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Thistle(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Tomato(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Transparent(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Turquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Violet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Wheat(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_White(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_WhiteSmoke(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Yellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_YellowGreen(
                    struct Color *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorsStatics, 0xcff52e04, 0xcca6, 0x4614, 0xa1,0x7e, 0x75,0x49,0x10,0xc8,0x4a,0x99)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorsStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        TrustLevel *trustLevel);

    /*** IColorsStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AliceBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_AntiqueWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Aqua)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Aquamarine)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Azure)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Beige)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Bisque)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Black)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BlanchedAlmond)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Blue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BlueViolet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Brown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BurlyWood)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_CadetBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Chartreuse)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Chocolate)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Coral)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_CornflowerBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Cornsilk)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Crimson)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Cyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkCyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGoldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkKhaki)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkMagenta)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOliveGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOrange)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOrchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSalmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkViolet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DeepPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DeepSkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DimGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DodgerBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Firebrick)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_FloralWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_ForestGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Fuchsia)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gainsboro)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_GhostWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gold)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Goldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Green)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_GreenYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Honeydew)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_HotPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_IndianRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Indigo)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Ivory)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Khaki)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Lavender)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LavenderBlush)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LawnGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LemonChiffon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightCoral)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightCyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGoldenrodYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSalmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSteelBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Lime)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LimeGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Linen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Magenta)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Maroon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumAquamarine)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumOrchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumPurple)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSpringGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumVioletRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MidnightBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MintCream)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MistyRose)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Moccasin)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_NavajoWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Navy)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OldLace)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Olive)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OliveDrab)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Orange)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OrangeRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Orchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleGoldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleVioletRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PapayaWhip)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PeachPuff)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Peru)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Pink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Plum)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PowderBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Purple)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Red)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_RosyBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_RoyalBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SaddleBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Salmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SandyBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SeaShell)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Sienna)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Silver)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Snow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SpringGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SteelBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Tan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Teal)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Thistle)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Tomato)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Transparent)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Turquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Violet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Wheat)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_White)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_WhiteSmoke)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Yellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_YellowGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorsStaticsVtbl;

interface __x_ABI_CWindows_CUI_CIColorsStatics {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorsStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorsStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorsStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorsStatics methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue(This,value) (This)->lpVtbl->get_AliceBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite(This,value) (This)->lpVtbl->get_AntiqueWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua(This,value) (This)->lpVtbl->get_Aqua(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine(This,value) (This)->lpVtbl->get_Aquamarine(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure(This,value) (This)->lpVtbl->get_Azure(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige(This,value) (This)->lpVtbl->get_Beige(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque(This,value) (This)->lpVtbl->get_Bisque(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Black(This,value) (This)->lpVtbl->get_Black(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond(This,value) (This)->lpVtbl->get_BlanchedAlmond(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue(This,value) (This)->lpVtbl->get_Blue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet(This,value) (This)->lpVtbl->get_BlueViolet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown(This,value) (This)->lpVtbl->get_Brown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood(This,value) (This)->lpVtbl->get_BurlyWood(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue(This,value) (This)->lpVtbl->get_CadetBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse(This,value) (This)->lpVtbl->get_Chartreuse(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate(This,value) (This)->lpVtbl->get_Chocolate(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral(This,value) (This)->lpVtbl->get_Coral(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue(This,value) (This)->lpVtbl->get_CornflowerBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk(This,value) (This)->lpVtbl->get_Cornsilk(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson(This,value) (This)->lpVtbl->get_Crimson(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan(This,value) (This)->lpVtbl->get_Cyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue(This,value) (This)->lpVtbl->get_DarkBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan(This,value) (This)->lpVtbl->get_DarkCyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod(This,value) (This)->lpVtbl->get_DarkGoldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray(This,value) (This)->lpVtbl->get_DarkGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen(This,value) (This)->lpVtbl->get_DarkGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki(This,value) (This)->lpVtbl->get_DarkKhaki(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta(This,value) (This)->lpVtbl->get_DarkMagenta(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen(This,value) (This)->lpVtbl->get_DarkOliveGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange(This,value) (This)->lpVtbl->get_DarkOrange(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid(This,value) (This)->lpVtbl->get_DarkOrchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed(This,value) (This)->lpVtbl->get_DarkRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon(This,value) (This)->lpVtbl->get_DarkSalmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen(This,value) (This)->lpVtbl->get_DarkSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue(This,value) (This)->lpVtbl->get_DarkSlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray(This,value) (This)->lpVtbl->get_DarkSlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise(This,value) (This)->lpVtbl->get_DarkTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet(This,value) (This)->lpVtbl->get_DarkViolet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink(This,value) (This)->lpVtbl->get_DeepPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue(This,value) (This)->lpVtbl->get_DeepSkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray(This,value) (This)->lpVtbl->get_DimGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue(This,value) (This)->lpVtbl->get_DodgerBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick(This,value) (This)->lpVtbl->get_Firebrick(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite(This,value) (This)->lpVtbl->get_FloralWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen(This,value) (This)->lpVtbl->get_ForestGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia(This,value) (This)->lpVtbl->get_Fuchsia(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro(This,value) (This)->lpVtbl->get_Gainsboro(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite(This,value) (This)->lpVtbl->get_GhostWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold(This,value) (This)->lpVtbl->get_Gold(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod(This,value) (This)->lpVtbl->get_Goldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray(This,value) (This)->lpVtbl->get_Gray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Green(This,value) (This)->lpVtbl->get_Green(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow(This,value) (This)->lpVtbl->get_GreenYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew(This,value) (This)->lpVtbl->get_Honeydew(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink(This,value) (This)->lpVtbl->get_HotPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed(This,value) (This)->lpVtbl->get_IndianRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo(This,value) (This)->lpVtbl->get_Indigo(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory(This,value) (This)->lpVtbl->get_Ivory(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki(This,value) (This)->lpVtbl->get_Khaki(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender(This,value) (This)->lpVtbl->get_Lavender(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush(This,value) (This)->lpVtbl->get_LavenderBlush(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen(This,value) (This)->lpVtbl->get_LawnGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon(This,value) (This)->lpVtbl->get_LemonChiffon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue(This,value) (This)->lpVtbl->get_LightBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral(This,value) (This)->lpVtbl->get_LightCoral(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan(This,value) (This)->lpVtbl->get_LightCyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow(This,value) (This)->lpVtbl->get_LightGoldenrodYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen(This,value) (This)->lpVtbl->get_LightGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray(This,value) (This)->lpVtbl->get_LightGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink(This,value) (This)->lpVtbl->get_LightPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon(This,value) (This)->lpVtbl->get_LightSalmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen(This,value) (This)->lpVtbl->get_LightSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue(This,value) (This)->lpVtbl->get_LightSkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray(This,value) (This)->lpVtbl->get_LightSlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue(This,value) (This)->lpVtbl->get_LightSteelBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow(This,value) (This)->lpVtbl->get_LightYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime(This,value) (This)->lpVtbl->get_Lime(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen(This,value) (This)->lpVtbl->get_LimeGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen(This,value) (This)->lpVtbl->get_Linen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta(This,value) (This)->lpVtbl->get_Magenta(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon(This,value) (This)->lpVtbl->get_Maroon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine(This,value) (This)->lpVtbl->get_MediumAquamarine(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue(This,value) (This)->lpVtbl->get_MediumBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid(This,value) (This)->lpVtbl->get_MediumOrchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple(This,value) (This)->lpVtbl->get_MediumPurple(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen(This,value) (This)->lpVtbl->get_MediumSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue(This,value) (This)->lpVtbl->get_MediumSlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen(This,value) (This)->lpVtbl->get_MediumSpringGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise(This,value) (This)->lpVtbl->get_MediumTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed(This,value) (This)->lpVtbl->get_MediumVioletRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue(This,value) (This)->lpVtbl->get_MidnightBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream(This,value) (This)->lpVtbl->get_MintCream(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose(This,value) (This)->lpVtbl->get_MistyRose(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin(This,value) (This)->lpVtbl->get_Moccasin(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite(This,value) (This)->lpVtbl->get_NavajoWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy(This,value) (This)->lpVtbl->get_Navy(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace(This,value) (This)->lpVtbl->get_OldLace(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive(This,value) (This)->lpVtbl->get_Olive(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab(This,value) (This)->lpVtbl->get_OliveDrab(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange(This,value) (This)->lpVtbl->get_Orange(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed(This,value) (This)->lpVtbl->get_OrangeRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid(This,value) (This)->lpVtbl->get_Orchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod(This,value) (This)->lpVtbl->get_PaleGoldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen(This,value) (This)->lpVtbl->get_PaleGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise(This,value) (This)->lpVtbl->get_PaleTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed(This,value) (This)->lpVtbl->get_PaleVioletRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip(This,value) (This)->lpVtbl->get_PapayaWhip(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff(This,value) (This)->lpVtbl->get_PeachPuff(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru(This,value) (This)->lpVtbl->get_Peru(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink(This,value) (This)->lpVtbl->get_Pink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum(This,value) (This)->lpVtbl->get_Plum(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue(This,value) (This)->lpVtbl->get_PowderBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple(This,value) (This)->lpVtbl->get_Purple(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Red(This,value) (This)->lpVtbl->get_Red(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown(This,value) (This)->lpVtbl->get_RosyBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue(This,value) (This)->lpVtbl->get_RoyalBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown(This,value) (This)->lpVtbl->get_SaddleBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon(This,value) (This)->lpVtbl->get_Salmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown(This,value) (This)->lpVtbl->get_SandyBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen(This,value) (This)->lpVtbl->get_SeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell(This,value) (This)->lpVtbl->get_SeaShell(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna(This,value) (This)->lpVtbl->get_Sienna(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver(This,value) (This)->lpVtbl->get_Silver(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue(This,value) (This)->lpVtbl->get_SkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue(This,value) (This)->lpVtbl->get_SlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray(This,value) (This)->lpVtbl->get_SlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow(This,value) (This)->lpVtbl->get_Snow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen(This,value) (This)->lpVtbl->get_SpringGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue(This,value) (This)->lpVtbl->get_SteelBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan(This,value) (This)->lpVtbl->get_Tan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal(This,value) (This)->lpVtbl->get_Teal(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle(This,value) (This)->lpVtbl->get_Thistle(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato(This,value) (This)->lpVtbl->get_Tomato(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent(This,value) (This)->lpVtbl->get_Transparent(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise(This,value) (This)->lpVtbl->get_Turquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet(This,value) (This)->lpVtbl->get_Violet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat(This,value) (This)->lpVtbl->get_Wheat(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_White(This,value) (This)->lpVtbl->get_White(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke(This,value) (This)->lpVtbl->get_WhiteSmoke(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow(This,value) (This)->lpVtbl->get_Yellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen(This,value) (This)->lpVtbl->get_YellowGreen(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface(__x_ABI_CWindows_CUI_CIColorsStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorsStatics_AddRef(__x_ABI_CWindows_CUI_CIColorsStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorsStatics_Release(__x_ABI_CWindows_CUI_CIColorsStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetIids(__x_ABI_CWindows_CUI_CIColorsStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorsStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorsStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorsStatics methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_AliceBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_AntiqueWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Aqua(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Aquamarine(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Azure(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Beige(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Bisque(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Black(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Black(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BlanchedAlmond(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Blue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BlueViolet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Brown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BurlyWood(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_CadetBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Chartreuse(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Chocolate(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Coral(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_CornflowerBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Cornsilk(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Crimson(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Cyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkCyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGoldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkKhaki(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkMagenta(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOliveGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOrange(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOrchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSalmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkViolet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DeepPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DeepSkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DimGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DodgerBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Firebrick(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_FloralWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_ForestGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Fuchsia(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gainsboro(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_GhostWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gold(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Goldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Green(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Green(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_GreenYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Honeydew(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_HotPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_IndianRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Indigo(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Ivory(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Khaki(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Lavender(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LavenderBlush(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LawnGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LemonChiffon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightCoral(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightCyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGoldenrodYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSalmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSteelBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Lime(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LimeGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Linen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Magenta(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Maroon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumAquamarine(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumOrchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumPurple(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSpringGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumVioletRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MidnightBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MintCream(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MistyRose(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Moccasin(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_NavajoWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Navy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OldLace(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Olive(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OliveDrab(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Orange(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OrangeRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Orchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleGoldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleVioletRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PapayaWhip(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PeachPuff(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Peru(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Pink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Plum(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PowderBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Purple(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Red(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Red(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_RosyBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_RoyalBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SaddleBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Salmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SandyBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SeaShell(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Sienna(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Silver(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Snow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SpringGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SteelBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Tan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Teal(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Thistle(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Tomato(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Transparent(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Turquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Violet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Wheat(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_White(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_White(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_WhiteSmoke(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Yellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_YellowGreen(This,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorsStatics IID___x_ABI_CWindows_CUI_CIColorsStatics
#define IColorsStaticsVtbl __x_ABI_CWindows_CUI_CIColorsStaticsVtbl
#define IColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics
#define IColorsStatics_QueryInterface __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface
#define IColorsStatics_AddRef __x_ABI_CWindows_CUI_CIColorsStatics_AddRef
#define IColorsStatics_Release __x_ABI_CWindows_CUI_CIColorsStatics_Release
#define IColorsStatics_GetIids __x_ABI_CWindows_CUI_CIColorsStatics_GetIids
#define IColorsStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName
#define IColorsStatics_GetTrustLevel __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel
#define IColorsStatics_get_AliceBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue
#define IColorsStatics_get_AntiqueWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite
#define IColorsStatics_get_Aqua __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua
#define IColorsStatics_get_Aquamarine __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine
#define IColorsStatics_get_Azure __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure
#define IColorsStatics_get_Beige __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige
#define IColorsStatics_get_Bisque __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque
#define IColorsStatics_get_Black __x_ABI_CWindows_CUI_CIColorsStatics_get_Black
#define IColorsStatics_get_BlanchedAlmond __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond
#define IColorsStatics_get_Blue __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue
#define IColorsStatics_get_BlueViolet __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet
#define IColorsStatics_get_Brown __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown
#define IColorsStatics_get_BurlyWood __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood
#define IColorsStatics_get_CadetBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue
#define IColorsStatics_get_Chartreuse __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse
#define IColorsStatics_get_Chocolate __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate
#define IColorsStatics_get_Coral __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral
#define IColorsStatics_get_CornflowerBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue
#define IColorsStatics_get_Cornsilk __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk
#define IColorsStatics_get_Crimson __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson
#define IColorsStatics_get_Cyan __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan
#define IColorsStatics_get_DarkBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue
#define IColorsStatics_get_DarkCyan __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan
#define IColorsStatics_get_DarkGoldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod
#define IColorsStatics_get_DarkGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray
#define IColorsStatics_get_DarkGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen
#define IColorsStatics_get_DarkKhaki __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki
#define IColorsStatics_get_DarkMagenta __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta
#define IColorsStatics_get_DarkOliveGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen
#define IColorsStatics_get_DarkOrange __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange
#define IColorsStatics_get_DarkOrchid __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid
#define IColorsStatics_get_DarkRed __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed
#define IColorsStatics_get_DarkSalmon __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon
#define IColorsStatics_get_DarkSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen
#define IColorsStatics_get_DarkSlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue
#define IColorsStatics_get_DarkSlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray
#define IColorsStatics_get_DarkTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise
#define IColorsStatics_get_DarkViolet __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet
#define IColorsStatics_get_DeepPink __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink
#define IColorsStatics_get_DeepSkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue
#define IColorsStatics_get_DimGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray
#define IColorsStatics_get_DodgerBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue
#define IColorsStatics_get_Firebrick __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick
#define IColorsStatics_get_FloralWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite
#define IColorsStatics_get_ForestGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen
#define IColorsStatics_get_Fuchsia __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia
#define IColorsStatics_get_Gainsboro __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro
#define IColorsStatics_get_GhostWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite
#define IColorsStatics_get_Gold __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold
#define IColorsStatics_get_Goldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod
#define IColorsStatics_get_Gray __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray
#define IColorsStatics_get_Green __x_ABI_CWindows_CUI_CIColorsStatics_get_Green
#define IColorsStatics_get_GreenYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow
#define IColorsStatics_get_Honeydew __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew
#define IColorsStatics_get_HotPink __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink
#define IColorsStatics_get_IndianRed __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed
#define IColorsStatics_get_Indigo __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo
#define IColorsStatics_get_Ivory __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory
#define IColorsStatics_get_Khaki __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki
#define IColorsStatics_get_Lavender __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender
#define IColorsStatics_get_LavenderBlush __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush
#define IColorsStatics_get_LawnGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen
#define IColorsStatics_get_LemonChiffon __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon
#define IColorsStatics_get_LightBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue
#define IColorsStatics_get_LightCoral __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral
#define IColorsStatics_get_LightCyan __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan
#define IColorsStatics_get_LightGoldenrodYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow
#define IColorsStatics_get_LightGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen
#define IColorsStatics_get_LightGray __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray
#define IColorsStatics_get_LightPink __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink
#define IColorsStatics_get_LightSalmon __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon
#define IColorsStatics_get_LightSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen
#define IColorsStatics_get_LightSkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue
#define IColorsStatics_get_LightSlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray
#define IColorsStatics_get_LightSteelBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue
#define IColorsStatics_get_LightYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow
#define IColorsStatics_get_Lime __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime
#define IColorsStatics_get_LimeGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen
#define IColorsStatics_get_Linen __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen
#define IColorsStatics_get_Magenta __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta
#define IColorsStatics_get_Maroon __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon
#define IColorsStatics_get_MediumAquamarine __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine
#define IColorsStatics_get_MediumBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue
#define IColorsStatics_get_MediumOrchid __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid
#define IColorsStatics_get_MediumPurple __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple
#define IColorsStatics_get_MediumSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen
#define IColorsStatics_get_MediumSlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue
#define IColorsStatics_get_MediumSpringGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen
#define IColorsStatics_get_MediumTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise
#define IColorsStatics_get_MediumVioletRed __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed
#define IColorsStatics_get_MidnightBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue
#define IColorsStatics_get_MintCream __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream
#define IColorsStatics_get_MistyRose __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose
#define IColorsStatics_get_Moccasin __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin
#define IColorsStatics_get_NavajoWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite
#define IColorsStatics_get_Navy __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy
#define IColorsStatics_get_OldLace __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace
#define IColorsStatics_get_Olive __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive
#define IColorsStatics_get_OliveDrab __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab
#define IColorsStatics_get_Orange __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange
#define IColorsStatics_get_OrangeRed __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed
#define IColorsStatics_get_Orchid __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid
#define IColorsStatics_get_PaleGoldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod
#define IColorsStatics_get_PaleGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen
#define IColorsStatics_get_PaleTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise
#define IColorsStatics_get_PaleVioletRed __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed
#define IColorsStatics_get_PapayaWhip __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip
#define IColorsStatics_get_PeachPuff __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff
#define IColorsStatics_get_Peru __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru
#define IColorsStatics_get_Pink __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink
#define IColorsStatics_get_Plum __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum
#define IColorsStatics_get_PowderBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue
#define IColorsStatics_get_Purple __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple
#define IColorsStatics_get_Red __x_ABI_CWindows_CUI_CIColorsStatics_get_Red
#define IColorsStatics_get_RosyBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown
#define IColorsStatics_get_RoyalBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue
#define IColorsStatics_get_SaddleBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown
#define IColorsStatics_get_Salmon __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon
#define IColorsStatics_get_SandyBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown
#define IColorsStatics_get_SeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen
#define IColorsStatics_get_SeaShell __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell
#define IColorsStatics_get_Sienna __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna
#define IColorsStatics_get_Silver __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver
#define IColorsStatics_get_SkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue
#define IColorsStatics_get_SlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue
#define IColorsStatics_get_SlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray
#define IColorsStatics_get_Snow __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow
#define IColorsStatics_get_SpringGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen
#define IColorsStatics_get_SteelBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue
#define IColorsStatics_get_Tan __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan
#define IColorsStatics_get_Teal __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal
#define IColorsStatics_get_Thistle __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle
#define IColorsStatics_get_Tomato __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato
#define IColorsStatics_get_Transparent __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent
#define IColorsStatics_get_Turquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise
#define IColorsStatics_get_Violet __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet
#define IColorsStatics_get_Wheat __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat
#define IColorsStatics_get_White __x_ABI_CWindows_CUI_CIColorsStatics_get_White
#define IColorsStatics_get_WhiteSmoke __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke
#define IColorsStatics_get_Yellow __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow
#define IColorsStatics_get_YellowGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUIContentRoot interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIUIContentRoot, 0x1dfcbac6, 0xb36b, 0x5cb9, 0x9b,0xc5, 0x2b,0x7a,0x0e,0xdd,0xc3,0x78);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("1dfcbac6-b36b-5cb9-9bc5-2b7a0eddc378")
            IUIContentRoot : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE get_UIContext(
                    ABI::Windows::UI::IUIContext **value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIUIContentRoot, 0x1dfcbac6, 0xb36b, 0x5cb9, 0x9b,0xc5, 0x2b,0x7a,0x0e,0xdd,0xc3,0x78)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIUIContentRootVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        TrustLevel *trustLevel);

    /*** IUIContentRoot methods ***/
    HRESULT (STDMETHODCALLTYPE *get_UIContext)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        __x_ABI_CWindows_CUI_CIUIContext **value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIUIContentRootVtbl;

interface __x_ABI_CWindows_CUI_CIUIContentRoot {
    CONST_VTBL __x_ABI_CWindows_CUI_CIUIContentRootVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUIContentRoot methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext(This,value) (This)->lpVtbl->get_UIContext(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface(__x_ABI_CWindows_CUI_CIUIContentRoot* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef(__x_ABI_CWindows_CUI_CIUIContentRoot* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContentRoot_Release(__x_ABI_CWindows_CUI_CIUIContentRoot* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids(__x_ABI_CWindows_CUI_CIUIContentRoot* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIUIContentRoot* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel(__x_ABI_CWindows_CUI_CIUIContentRoot* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUIContentRoot methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext(__x_ABI_CWindows_CUI_CIUIContentRoot* This,__x_ABI_CWindows_CUI_CIUIContext **value) {
    return This->lpVtbl->get_UIContext(This,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IUIContentRoot IID___x_ABI_CWindows_CUI_CIUIContentRoot
#define IUIContentRootVtbl __x_ABI_CWindows_CUI_CIUIContentRootVtbl
#define IUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot
#define IUIContentRoot_QueryInterface __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface
#define IUIContentRoot_AddRef __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef
#define IUIContentRoot_Release __x_ABI_CWindows_CUI_CIUIContentRoot_Release
#define IUIContentRoot_GetIids __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids
#define IUIContentRoot_GetRuntimeClassName __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName
#define IUIContentRoot_GetTrustLevel __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel
#define IUIContentRoot_get_UIContext __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*****************************************************************************
 * IUIContext interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIUIContext, 0xbb5cfacd, 0x5bd8, 0x59d0, 0xa5,0x9e, 0x1c,0x17,0xa4,0xd6,0xd2,0x43);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("bb5cfacd-5bd8-59d0-a59e-1c17a4d6d243")
            IUIContext : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIUIContext, 0xbb5cfacd, 0x5bd8, 0x59d0, 0xa5,0x9e, 0x1c,0x17,0xa4,0xd6,0xd2,0x43)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIUIContextVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIUIContext *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIUIContext *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIUIContextVtbl;

interface __x_ABI_CWindows_CUI_CIUIContext {
    CONST_VTBL __x_ABI_CWindows_CUI_CIUIContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIUIContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIUIContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIUIContext_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIUIContext_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_QueryInterface(__x_ABI_CWindows_CUI_CIUIContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContext_AddRef(__x_ABI_CWindows_CUI_CIUIContext* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContext_Release(__x_ABI_CWindows_CUI_CIUIContext* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetIids(__x_ABI_CWindows_CUI_CIUIContext* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIUIContext* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel(__x_ABI_CWindows_CUI_CIUIContext* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IUIContext IID___x_ABI_CWindows_CUI_CIUIContext
#define IUIContextVtbl __x_ABI_CWindows_CUI_CIUIContextVtbl
#define IUIContext __x_ABI_CWindows_CUI_CIUIContext
#define IUIContext_QueryInterface __x_ABI_CWindows_CUI_CIUIContext_QueryInterface
#define IUIContext_AddRef __x_ABI_CWindows_CUI_CIUIContext_AddRef
#define IUIContext_Release __x_ABI_CWindows_CUI_CIUIContext_Release
#define IUIContext_GetIids __x_ABI_CWindows_CUI_CIUIContext_GetIids
#define IUIContext_GetRuntimeClassName __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName
#define IUIContext_GetTrustLevel __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*
 * Class Windows.UI.ColorHelper
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED
#define RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_ColorHelper[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','H','e','l','p','e','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ColorHelper[] = L"Windows.UI.ColorHelper";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ColorHelper[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','H','e','l','p','e','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.UI.Colors
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_UI_Colors_DEFINED
#define RUNTIMECLASS_Windows_UI_Colors_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_Colors[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Colors[] = L"Windows.UI.Colors";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Colors[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_Colors_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.UI.UIContentRoot
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED
#define RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','n','t','R','o','o','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = L"Windows.UI.UIContentRoot";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','n','t','R','o','o','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*
 * Class Windows.UI.UIContext
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef RUNTIMECLASS_Windows_UI_UIContext_DEFINED
#define RUNTIMECLASS_Windows_UI_UIContext_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_UIContext[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','x','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContext[] = L"Windows.UI.UIContext";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContext[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','x','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_UIContext_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*****************************************************************************
 * IIterable<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIIterable_1_Color_INTERFACE_DEFINED__
#define ____FIIterable_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterable_1_Color, 0x932eef5e, 0x2c2f, 0x5eae, 0x92,0x9a, 0x74,0xe9,0x73,0xb5,0x7c,0x27);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("932eef5e-2c2f-5eae-929a-74e973b57c27")
                IIterable<ABI::Windows::UI::Color > : IIterable_impl<ABI::Windows::UI::Color >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterable_1_Color, 0x932eef5e, 0x2c2f, 0x5eae, 0x92,0x9a, 0x74,0xe9,0x73,0xb5,0x7c,0x27)
#endif
#else
typedef struct __FIIterable_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterable_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterable_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterable_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterable_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterable_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterable_1_Color *This,
        TrustLevel *trustLevel);

    /*** IIterable<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *First)(
        __FIIterable_1_Color *This,
        __FIIterator_1_Color **value);

    END_INTERFACE
} __FIIterable_1_ColorVtbl;

interface __FIIterable_1_Color {
    CONST_VTBL __FIIterable_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterable_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterable_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterable_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterable_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterable_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterable_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterable<ABI::Windows::UI::Color > methods ***/
#define __FIIterable_1_Color_First(This,value) (This)->lpVtbl->First(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_QueryInterface(__FIIterable_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterable_1_Color_AddRef(__FIIterable_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterable_1_Color_Release(__FIIterable_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetIids(__FIIterable_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetRuntimeClassName(__FIIterable_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetTrustLevel(__FIIterable_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterable<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_First(__FIIterable_1_Color* This,__FIIterator_1_Color **value) {
    return This->lpVtbl->First(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterable_Color IID___FIIterable_1_Color
#define IIterable_ColorVtbl __FIIterable_1_ColorVtbl
#define IIterable_Color __FIIterable_1_Color
#define IIterable_Color_QueryInterface __FIIterable_1_Color_QueryInterface
#define IIterable_Color_AddRef __FIIterable_1_Color_AddRef
#define IIterable_Color_Release __FIIterable_1_Color_Release
#define IIterable_Color_GetIids __FIIterable_1_Color_GetIids
#define IIterable_Color_GetRuntimeClassName __FIIterable_1_Color_GetRuntimeClassName
#define IIterable_Color_GetTrustLevel __FIIterable_1_Color_GetTrustLevel
#define IIterable_Color_First __FIIterable_1_Color_First
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterable_1_Color_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterable<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIIterable_1_WindowId_INTERFACE_DEFINED__
#define ____FIIterable_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterable_1_WindowId, 0x745698bf, 0x22ad, 0x5c0d, 0xb0,0xe0, 0x07,0xd3,0x5a,0x1c,0x97,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("745698bf-22ad-5c0d-b0e0-07d35a1c9719")
                IIterable<ABI::Windows::UI::WindowId > : IIterable_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterable_1_WindowId, 0x745698bf, 0x22ad, 0x5c0d, 0xb0,0xe0, 0x07,0xd3,0x5a,0x1c,0x97,0x19)
#endif
#else
typedef struct __FIIterable_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterable_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterable_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterable_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterable_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterable_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterable_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IIterable<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *First)(
        __FIIterable_1_WindowId *This,
        __FIIterator_1_WindowId **value);

    END_INTERFACE
} __FIIterable_1_WindowIdVtbl;

interface __FIIterable_1_WindowId {
    CONST_VTBL __FIIterable_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterable_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterable_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterable_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterable_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterable_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterable_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterable<ABI::Windows::UI::WindowId > methods ***/
#define __FIIterable_1_WindowId_First(This,value) (This)->lpVtbl->First(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_QueryInterface(__FIIterable_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterable_1_WindowId_AddRef(__FIIterable_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterable_1_WindowId_Release(__FIIterable_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetIids(__FIIterable_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetRuntimeClassName(__FIIterable_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetTrustLevel(__FIIterable_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterable<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_First(__FIIterable_1_WindowId* This,__FIIterator_1_WindowId **value) {
    return This->lpVtbl->First(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterable_WindowId IID___FIIterable_1_WindowId
#define IIterable_WindowIdVtbl __FIIterable_1_WindowIdVtbl
#define IIterable_WindowId __FIIterable_1_WindowId
#define IIterable_WindowId_QueryInterface __FIIterable_1_WindowId_QueryInterface
#define IIterable_WindowId_AddRef __FIIterable_1_WindowId_AddRef
#define IIterable_WindowId_Release __FIIterable_1_WindowId_Release
#define IIterable_WindowId_GetIids __FIIterable_1_WindowId_GetIids
#define IIterable_WindowId_GetRuntimeClassName __FIIterable_1_WindowId_GetRuntimeClassName
#define IIterable_WindowId_GetTrustLevel __FIIterable_1_WindowId_GetTrustLevel
#define IIterable_WindowId_First __FIIterable_1_WindowId_First
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterable_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterator<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIIterator_1_Color_INTERFACE_DEFINED__
#define ____FIIterator_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterator_1_Color, 0xc4310b12, 0x7ac2, 0x5e5b, 0xb5,0x11, 0xe5,0x46,0xee,0xa4,0x73,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("c4310b12-7ac2-5e5b-b511-e546eea473b4")
                IIterator<ABI::Windows::UI::Color > : IIterator_impl<ABI::Windows::UI::Color >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterator_1_Color, 0xc4310b12, 0x7ac2, 0x5e5b, 0xb5,0x11, 0xe5,0x46,0xee,0xa4,0x73,0xb4)
#endif
#else
typedef struct __FIIterator_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterator_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterator_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterator_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterator_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterator_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterator_1_Color *This,
        TrustLevel *trustLevel);

    /*** IIterator<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Current)(
        __FIIterator_1_Color *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
        __FIIterator_1_Color *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        __FIIterator_1_Color *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIIterator_1_Color *This,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CColor *items,
        UINT32 *value);

    END_INTERFACE
} __FIIterator_1_ColorVtbl;

interface __FIIterator_1_Color {
    CONST_VTBL __FIIterator_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterator_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterator_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterator_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterator_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterator_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterator_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterator<ABI::Windows::UI::Color > methods ***/
#define __FIIterator_1_Color_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
#define __FIIterator_1_Color_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
#define __FIIterator_1_Color_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
#define __FIIterator_1_Color_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_QueryInterface(__FIIterator_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterator_1_Color_AddRef(__FIIterator_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterator_1_Color_Release(__FIIterator_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetIids(__FIIterator_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetRuntimeClassName(__FIIterator_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetTrustLevel(__FIIterator_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterator<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_get_Current(__FIIterator_1_Color* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Current(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_get_HasCurrent(__FIIterator_1_Color* This,WINBOOL *value) {
    return This->lpVtbl->get_HasCurrent(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_MoveNext(__FIIterator_1_Color* This,WINBOOL *value) {
    return This->lpVtbl->MoveNext(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetMany(__FIIterator_1_Color* This,UINT32 items_size,struct __x_ABI_CWindows_CUI_CColor *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterator_Color IID___FIIterator_1_Color
#define IIterator_ColorVtbl __FIIterator_1_ColorVtbl
#define IIterator_Color __FIIterator_1_Color
#define IIterator_Color_QueryInterface __FIIterator_1_Color_QueryInterface
#define IIterator_Color_AddRef __FIIterator_1_Color_AddRef
#define IIterator_Color_Release __FIIterator_1_Color_Release
#define IIterator_Color_GetIids __FIIterator_1_Color_GetIids
#define IIterator_Color_GetRuntimeClassName __FIIterator_1_Color_GetRuntimeClassName
#define IIterator_Color_GetTrustLevel __FIIterator_1_Color_GetTrustLevel
#define IIterator_Color_get_Current __FIIterator_1_Color_get_Current
#define IIterator_Color_get_HasCurrent __FIIterator_1_Color_get_HasCurrent
#define IIterator_Color_MoveNext __FIIterator_1_Color_MoveNext
#define IIterator_Color_GetMany __FIIterator_1_Color_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterator_1_Color_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterator<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIIterator_1_WindowId_INTERFACE_DEFINED__
#define ____FIIterator_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterator_1_WindowId, 0xba0a30a1, 0xc082, 0x5671, 0xac,0x07, 0x7a,0xaa,0x4f,0x26,0x96,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("ba0a30a1-c082-5671-ac07-7aaa4f269670")
                IIterator<ABI::Windows::UI::WindowId > : IIterator_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterator_1_WindowId, 0xba0a30a1, 0xc082, 0x5671, 0xac,0x07, 0x7a,0xaa,0x4f,0x26,0x96,0x70)
#endif
#else
typedef struct __FIIterator_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterator_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterator_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterator_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterator_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterator_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterator_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IIterator<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Current)(
        __FIIterator_1_WindowId *This,
        struct __x_ABI_CWindows_CUI_CWindowId *value);

    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
        __FIIterator_1_WindowId *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        __FIIterator_1_WindowId *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIIterator_1_WindowId *This,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CWindowId *items,
        UINT32 *value);

    END_INTERFACE
} __FIIterator_1_WindowIdVtbl;

interface __FIIterator_1_WindowId {
    CONST_VTBL __FIIterator_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterator_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterator_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterator_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterator_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterator_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterator_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterator<ABI::Windows::UI::WindowId > methods ***/
#define __FIIterator_1_WindowId_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
#define __FIIterator_1_WindowId_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
#define __FIIterator_1_WindowId_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
#define __FIIterator_1_WindowId_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_QueryInterface(__FIIterator_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterator_1_WindowId_AddRef(__FIIterator_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterator_1_WindowId_Release(__FIIterator_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetIids(__FIIterator_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetRuntimeClassName(__FIIterator_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetTrustLevel(__FIIterator_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterator<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_get_Current(__FIIterator_1_WindowId* This,struct __x_ABI_CWindows_CUI_CWindowId *value) {
    return This->lpVtbl->get_Current(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_get_HasCurrent(__FIIterator_1_WindowId* This,WINBOOL *value) {
    return This->lpVtbl->get_HasCurrent(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_MoveNext(__FIIterator_1_WindowId* This,WINBOOL *value) {
    return This->lpVtbl->MoveNext(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetMany(__FIIterator_1_WindowId* This,UINT32 items_size,struct __x_ABI_CWindows_CUI_CWindowId *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterator_WindowId IID___FIIterator_1_WindowId
#define IIterator_WindowIdVtbl __FIIterator_1_WindowIdVtbl
#define IIterator_WindowId __FIIterator_1_WindowId
#define IIterator_WindowId_QueryInterface __FIIterator_1_WindowId_QueryInterface
#define IIterator_WindowId_AddRef __FIIterator_1_WindowId_AddRef
#define IIterator_WindowId_Release __FIIterator_1_WindowId_Release
#define IIterator_WindowId_GetIids __FIIterator_1_WindowId_GetIids
#define IIterator_WindowId_GetRuntimeClassName __FIIterator_1_WindowId_GetRuntimeClassName
#define IIterator_WindowId_GetTrustLevel __FIIterator_1_WindowId_GetTrustLevel
#define IIterator_WindowId_get_Current __FIIterator_1_WindowId_get_Current
#define IIterator_WindowId_get_HasCurrent __FIIterator_1_WindowId_get_HasCurrent
#define IIterator_WindowId_MoveNext __FIIterator_1_WindowId_MoveNext
#define IIterator_WindowId_GetMany __FIIterator_1_WindowId_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterator_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIVectorView_1_WindowId_INTERFACE_DEFINED__
#define ____FIVectorView_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_WindowId, 0xf49e7371, 0xb31a, 0x5620, 0xa4,0x2e, 0x7e,0x96,0x90,0x03,0xf0,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("f49e7371-b31a-5620-a42e-7e969003f0ff")
                IVectorView<ABI::Windows::UI::WindowId > : IVectorView_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_WindowId, 0xf49e7371, 0xb31a, 0x5620, 0xa4,0x2e, 0x7e,0x96,0x90,0x03,0xf0,0xff)
#endif
#else
typedef struct __FIVectorView_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_WindowId *This,
        UINT32 index,
        struct __x_ABI_CWindows_CUI_CWindowId *value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_WindowId *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_WindowId *This,
        struct __x_ABI_CWindows_CUI_CWindowId element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_WindowId *This,
        UINT32 start_index,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CWindowId *items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_WindowIdVtbl;

interface __FIVectorView_1_WindowId {
    CONST_VTBL __FIVectorView_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
#define __FIVectorView_1_WindowId_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_WindowId_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_WindowId_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_WindowId_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_QueryInterface(__FIVectorView_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIVectorView_1_WindowId_AddRef(__FIVectorView_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIVectorView_1_WindowId_Release(__FIVectorView_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetIids(__FIVectorView_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetRuntimeClassName(__FIVectorView_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetTrustLevel(__FIVectorView_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetAt(__FIVectorView_1_WindowId* This,UINT32 index,struct __x_ABI_CWindows_CUI_CWindowId *value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_get_Size(__FIVectorView_1_WindowId* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_IndexOf(__FIVectorView_1_WindowId* This,struct __x_ABI_CWindows_CUI_CWindowId element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetMany(__FIVectorView_1_WindowId* This,UINT32 start_index,UINT32 items_size,struct __x_ABI_CWindows_CUI_CWindowId *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_WindowId IID___FIVectorView_1_WindowId
#define IVectorView_WindowIdVtbl __FIVectorView_1_WindowIdVtbl
#define IVectorView_WindowId __FIVectorView_1_WindowId
#define IVectorView_WindowId_QueryInterface __FIVectorView_1_WindowId_QueryInterface
#define IVectorView_WindowId_AddRef __FIVectorView_1_WindowId_AddRef
#define IVectorView_WindowId_Release __FIVectorView_1_WindowId_Release
#define IVectorView_WindowId_GetIids __FIVectorView_1_WindowId_GetIids
#define IVectorView_WindowId_GetRuntimeClassName __FIVectorView_1_WindowId_GetRuntimeClassName
#define IVectorView_WindowId_GetTrustLevel __FIVectorView_1_WindowId_GetTrustLevel
#define IVectorView_WindowId_GetAt __FIVectorView_1_WindowId_GetAt
#define IVectorView_WindowId_get_Size __FIVectorView_1_WindowId_get_Size
#define IVectorView_WindowId_IndexOf __FIVectorView_1_WindowId_IndexOf
#define IVectorView_WindowId_GetMany __FIVectorView_1_WindowId_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IReference<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIReference_1_Color_INTERFACE_DEFINED__
#define ____FIReference_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIReference_1_Color, 0xab8e5d11, 0xb0c1, 0x5a21, 0x95,0xae, 0xf1,0x6b,0xf3,0xa3,0x76,0x24);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("ab8e5d11-b0c1-5a21-95ae-f16bf3a37624")
            IReference<ABI::Windows::UI::Color > : IReference_impl<ABI::Windows::UI::Color >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIReference_1_Color, 0xab8e5d11, 0xb0c1, 0x5a21, 0x95,0xae, 0xf1,0x6b,0xf3,0xa3,0x76,0x24)
#endif
#else
typedef struct __FIReference_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIReference_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIReference_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIReference_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIReference_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIReference_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIReference_1_Color *This,
        TrustLevel *trustLevel);

    /*** IReference<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Value)(
        __FIReference_1_Color *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __FIReference_1_ColorVtbl;

interface __FIReference_1_Color {
    CONST_VTBL __FIReference_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIReference_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIReference_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIReference_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIReference_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIReference_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIReference_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IReference<ABI::Windows::UI::Color > methods ***/
#define __FIReference_1_Color_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_QueryInterface(__FIReference_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIReference_1_Color_AddRef(__FIReference_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIReference_1_Color_Release(__FIReference_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetIids(__FIReference_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetRuntimeClassName(__FIReference_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetTrustLevel(__FIReference_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IReference<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_get_Value(__FIReference_1_Color* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Value(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IReference_Color IID___FIReference_1_Color
#define IReference_ColorVtbl __FIReference_1_ColorVtbl
#define IReference_Color __FIReference_1_Color
#define IReference_Color_QueryInterface __FIReference_1_Color_QueryInterface
#define IReference_Color_AddRef __FIReference_1_Color_AddRef
#define IReference_Color_Release __FIReference_1_Color_Release
#define IReference_Color_GetIids __FIReference_1_Color_GetIids
#define IReference_Color_GetRuntimeClassName __FIReference_1_Color_GetRuntimeClassName
#define IReference_Color_GetTrustLevel __FIReference_1_Color_GetTrustLevel
#define IReference_Color_get_Value __FIReference_1_Color_get_Value
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIReference_1_Color_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_ui_h__ */
