/*** Autogenerated by WIDL 8.5 from include/windows.ui.viewmanagement.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_viewmanagement_h__
#define __windows_ui_viewmanagement_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_CViewManagement_CIUISettings_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings __x_ABI_CWindows_CUI_CViewManagement_CIUISettings;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings ABI::Windows::UI::ViewManagement::IUISettings
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 ABI::Windows::UI::ViewManagement::IUISettings2
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings2;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 ABI::Windows::UI::ViewManagement::IUISettings3
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings3;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CUISettings_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CUISettings_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                class UISettings;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CViewManagement_CUISettings __x_ABI_CWindows_CUI_CViewManagement_CUISettings;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CUISettings_FWD_DEFINED__ */

#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_FWD_DEFINED__
#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_FWD_DEFINED__
typedef interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable;
#ifdef __cplusplus
#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>
#include <windows.devices.enumeration.h>
#include <windows.ui.h>
#include <windows.ui.core.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CUI_CViewManagement_CHandPreference __x_ABI_CWindows_CUI_CViewManagement_CHandPreference;
#endif /* __cplusplus */

#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CUI_CViewManagement_CUIColorType __x_ABI_CWindows_CUI_CViewManagement_CUIColorType;
#endif /* __cplusplus */

#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CUI_CViewManagement_CUIElementType __x_ABI_CWindows_CUI_CViewManagement_CUIElementType;
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings __x_ABI_CWindows_CUI_CViewManagement_CIUISettings;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings ABI::Windows::UI::ViewManagement::IUISettings
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 ABI::Windows::UI::ViewManagement::IUISettings2
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings2;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 ABI::Windows::UI::ViewManagement::IUISettings3
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings3;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings4_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings4_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings4 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings4;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings4 ABI::Windows::UI::ViewManagement::IUISettings4
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings4;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings5_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings5_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings5 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings5;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings5 ABI::Windows::UI::ViewManagement::IUISettings5
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings5;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings6_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings6_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings6 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings6;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings6 ABI::Windows::UI::ViewManagement::IUISettings6
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                interface IUISettings6;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                enum HandPreference {
                    HandPreference_LeftHanded = 0,
                    HandPreference_RightHanded = 1
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CUI_CViewManagement_CHandPreference {
    HandPreference_LeftHanded = 0,
    HandPreference_RightHanded = 1
};
#ifdef WIDL_using_Windows_UI_ViewManagement
#define HandPreference __x_ABI_CWindows_CUI_CViewManagement_CHandPreference
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                enum UIColorType {
                    UIColorType_Background = 0,
                    UIColorType_Foreground = 1,
                    UIColorType_AccentDark3 = 2,
                    UIColorType_AccentDark2 = 3,
                    UIColorType_AccentDark1 = 4,
                    UIColorType_Accent = 5,
                    UIColorType_AccentLight1 = 6,
                    UIColorType_AccentLight2 = 7,
                    UIColorType_AccentLight3 = 8,
                    UIColorType_Complement = 9
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CUI_CViewManagement_CUIColorType {
    UIColorType_Background = 0,
    UIColorType_Foreground = 1,
    UIColorType_AccentDark3 = 2,
    UIColorType_AccentDark2 = 3,
    UIColorType_AccentDark1 = 4,
    UIColorType_Accent = 5,
    UIColorType_AccentLight1 = 6,
    UIColorType_AccentLight2 = 7,
    UIColorType_AccentLight3 = 8,
    UIColorType_Complement = 9
};
#ifdef WIDL_using_Windows_UI_ViewManagement
#define UIColorType __x_ABI_CWindows_CUI_CViewManagement_CUIColorType
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                enum UIElementType {
                    UIElementType_ActiveCaption = 0,
                    UIElementType_Background = 1,
                    UIElementType_ButtonFace = 2,
                    UIElementType_ButtonText = 3,
                    UIElementType_CaptionText = 4,
                    UIElementType_GrayText = 5,
                    UIElementType_Highlight = 6,
                    UIElementType_HighlightText = 7,
                    UIElementType_Hotlight = 8,
                    UIElementType_InactiveCaption = 9,
                    UIElementType_InactiveCaptionText = 10,
                    UIElementType_Window = 11,
                    UIElementType_WindowText = 12,
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_AccentColor = 1000,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_TextHigh = 1001,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_TextMedium = 1002,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_TextLow = 1003,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_TextContrastWithHigh = 1004,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_NonTextHigh = 1005,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_NonTextMediumHigh = 1006,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_NonTextMedium = 1007,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_NonTextMediumLow = 1008,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_NonTextLow = 1009,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_PageBackground = 1010,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_PopupBackground = 1011,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
                    UIElementType_OverlayOutsidePopup = 1012
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CUI_CViewManagement_CUIElementType {
    UIElementType_ActiveCaption = 0,
    UIElementType_Background = 1,
    UIElementType_ButtonFace = 2,
    UIElementType_ButtonText = 3,
    UIElementType_CaptionText = 4,
    UIElementType_GrayText = 5,
    UIElementType_Highlight = 6,
    UIElementType_HighlightText = 7,
    UIElementType_Hotlight = 8,
    UIElementType_InactiveCaption = 9,
    UIElementType_InactiveCaptionText = 10,
    UIElementType_Window = 11,
    UIElementType_WindowText = 12,
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_AccentColor = 1000,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_TextHigh = 1001,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_TextMedium = 1002,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_TextLow = 1003,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_TextContrastWithHigh = 1004,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_NonTextHigh = 1005,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_NonTextMediumHigh = 1006,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_NonTextMedium = 1007,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_NonTextMediumLow = 1008,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_NonTextLow = 1009,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_PageBackground = 1010,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_PopupBackground = 1011,
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
    UIElementType_OverlayOutsidePopup = 1012
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
};
#ifdef WIDL_using_Windows_UI_ViewManagement
#define UIElementType __x_ABI_CWindows_CUI_CViewManagement_CUIElementType
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
/*****************************************************************************
 * IUISettings interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings, 0x85361600, 0x1c63, 0x4627, 0xbc,0xb1, 0x3a,0x89,0xe0,0xbc,0x9c,0x55);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                MIDL_INTERFACE("85361600-1c63-4627-bcb1-3a89e0bc9c55")
                IUISettings : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_HandPreference(
                        enum HandPreference *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_CursorSize(
                        struct Size *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ScrollBarSize(
                        struct Size *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ScrollBarArrowSize(
                        struct Size *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ScrollBarThumbBoxSize(
                        struct Size *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_MessageDuration(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_AnimationsEnabled(
                        boolean *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_CaretBrowsingEnabled(
                        boolean *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_CaretBlinkRate(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_CaretWidth(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_DoubleClickTime(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_MouseHoverTime(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE UIElementColor(
                        enum UIElementType element,
                        struct Color *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings, 0x85361600, 0x1c63, 0x4627, 0xbc,0xb1, 0x3a,0x89,0xe0,0xbc,0x9c,0x55)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIUISettingsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IUISettings methods ***/
    HRESULT (STDMETHODCALLTYPE *get_HandPreference)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        enum __x_ABI_CWindows_CUI_CViewManagement_CHandPreference *value);

    HRESULT (STDMETHODCALLTYPE *get_CursorSize)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        struct __x_ABI_CWindows_CFoundation_CSize *value);

    HRESULT (STDMETHODCALLTYPE *get_ScrollBarSize)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        struct __x_ABI_CWindows_CFoundation_CSize *value);

    HRESULT (STDMETHODCALLTYPE *get_ScrollBarArrowSize)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        struct __x_ABI_CWindows_CFoundation_CSize *value);

    HRESULT (STDMETHODCALLTYPE *get_ScrollBarThumbBoxSize)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        struct __x_ABI_CWindows_CFoundation_CSize *value);

    HRESULT (STDMETHODCALLTYPE *get_MessageDuration)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_AnimationsEnabled)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        boolean *value);

    HRESULT (STDMETHODCALLTYPE *get_CaretBrowsingEnabled)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        boolean *value);

    HRESULT (STDMETHODCALLTYPE *get_CaretBlinkRate)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_CaretWidth)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_DoubleClickTime)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_MouseHoverTime)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *UIElementColor)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *This,
        enum __x_ABI_CWindows_CUI_CViewManagement_CUIElementType element,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CViewManagement_CIUISettingsVtbl;

interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings {
    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIUISettingsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUISettings methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_HandPreference(This,value) (This)->lpVtbl->get_HandPreference(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CursorSize(This,value) (This)->lpVtbl->get_CursorSize(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarSize(This,value) (This)->lpVtbl->get_ScrollBarSize(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarArrowSize(This,value) (This)->lpVtbl->get_ScrollBarArrowSize(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarThumbBoxSize(This,value) (This)->lpVtbl->get_ScrollBarThumbBoxSize(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MessageDuration(This,value) (This)->lpVtbl->get_MessageDuration(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_AnimationsEnabled(This,value) (This)->lpVtbl->get_AnimationsEnabled(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBrowsingEnabled(This,value) (This)->lpVtbl->get_CaretBrowsingEnabled(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBlinkRate(This,value) (This)->lpVtbl->get_CaretBlinkRate(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretWidth(This,value) (This)->lpVtbl->get_CaretWidth(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_DoubleClickTime(This,value) (This)->lpVtbl->get_DoubleClickTime(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MouseHoverTime(This,value) (This)->lpVtbl->get_MouseHoverTime(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_UIElementColor(This,element,value) (This)->lpVtbl->UIElementColor(This,element,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_Release(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUISettings methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_HandPreference(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,enum __x_ABI_CWindows_CUI_CViewManagement_CHandPreference *value) {
    return This->lpVtbl->get_HandPreference(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CursorSize(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,struct __x_ABI_CWindows_CFoundation_CSize *value) {
    return This->lpVtbl->get_CursorSize(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarSize(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,struct __x_ABI_CWindows_CFoundation_CSize *value) {
    return This->lpVtbl->get_ScrollBarSize(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarArrowSize(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,struct __x_ABI_CWindows_CFoundation_CSize *value) {
    return This->lpVtbl->get_ScrollBarArrowSize(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarThumbBoxSize(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,struct __x_ABI_CWindows_CFoundation_CSize *value) {
    return This->lpVtbl->get_ScrollBarThumbBoxSize(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MessageDuration(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,UINT32 *value) {
    return This->lpVtbl->get_MessageDuration(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_AnimationsEnabled(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,boolean *value) {
    return This->lpVtbl->get_AnimationsEnabled(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBrowsingEnabled(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,boolean *value) {
    return This->lpVtbl->get_CaretBrowsingEnabled(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBlinkRate(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,UINT32 *value) {
    return This->lpVtbl->get_CaretBlinkRate(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretWidth(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,UINT32 *value) {
    return This->lpVtbl->get_CaretWidth(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_DoubleClickTime(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,UINT32 *value) {
    return This->lpVtbl->get_DoubleClickTime(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MouseHoverTime(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,UINT32 *value) {
    return This->lpVtbl->get_MouseHoverTime(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_UIElementColor(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings* This,enum __x_ABI_CWindows_CUI_CViewManagement_CUIElementType element,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->UIElementColor(This,element,value);
}
#endif
#ifdef WIDL_using_Windows_UI_ViewManagement
#define IID_IUISettings IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings
#define IUISettingsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIUISettingsVtbl
#define IUISettings __x_ABI_CWindows_CUI_CViewManagement_CIUISettings
#define IUISettings_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_QueryInterface
#define IUISettings_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_AddRef
#define IUISettings_Release __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_Release
#define IUISettings_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetIids
#define IUISettings_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetRuntimeClassName
#define IUISettings_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_GetTrustLevel
#define IUISettings_get_HandPreference __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_HandPreference
#define IUISettings_get_CursorSize __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CursorSize
#define IUISettings_get_ScrollBarSize __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarSize
#define IUISettings_get_ScrollBarArrowSize __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarArrowSize
#define IUISettings_get_ScrollBarThumbBoxSize __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_ScrollBarThumbBoxSize
#define IUISettings_get_MessageDuration __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MessageDuration
#define IUISettings_get_AnimationsEnabled __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_AnimationsEnabled
#define IUISettings_get_CaretBrowsingEnabled __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBrowsingEnabled
#define IUISettings_get_CaretBlinkRate __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretBlinkRate
#define IUISettings_get_CaretWidth __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_CaretWidth
#define IUISettings_get_DoubleClickTime __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_DoubleClickTime
#define IUISettings_get_MouseHoverTime __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_get_MouseHoverTime
#define IUISettings_UIElementColor __x_ABI_CWindows_CUI_CViewManagement_CIUISettings_UIElementColor
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif

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

/*****************************************************************************
 * IUISettings2 interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings2, 0xbad82401, 0x2721, 0x44f9, 0xbb,0x91, 0x2b,0xb2,0x28,0xbe,0x44,0x2f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                MIDL_INTERFACE("bad82401-2721-44f9-bb91-2bb228be442f")
                IUISettings2 : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_TextScaleFactor(
                        DOUBLE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE add_TextScaleFactorChanged(
                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > *handler,
                        EventRegistrationToken *cookie) = 0;

                    virtual HRESULT STDMETHODCALLTYPE remove_TextScaleFactorChanged(
                        EventRegistrationToken cookie) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2, 0xbad82401, 0x2721, 0x44f9, 0xbb,0x91, 0x2b,0xb2,0x28,0xbe,0x44,0x2f)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IUISettings2 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_TextScaleFactor)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 *This,
        DOUBLE *value);

    HRESULT (STDMETHODCALLTYPE *add_TextScaleFactorChanged)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 *This,
        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable *handler,
        EventRegistrationToken *cookie);

    HRESULT (STDMETHODCALLTYPE *remove_TextScaleFactorChanged)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 *This,
        EventRegistrationToken cookie);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2Vtbl;

interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2 {
    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUISettings2 methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_get_TextScaleFactor(This,value) (This)->lpVtbl->get_TextScaleFactor(This,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_add_TextScaleFactorChanged(This,handler,cookie) (This)->lpVtbl->add_TextScaleFactorChanged(This,handler,cookie)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_remove_TextScaleFactorChanged(This,cookie) (This)->lpVtbl->remove_TextScaleFactorChanged(This,cookie)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_Release(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUISettings2 methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_get_TextScaleFactor(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,DOUBLE *value) {
    return This->lpVtbl->get_TextScaleFactor(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_add_TextScaleFactorChanged(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable *handler,EventRegistrationToken *cookie) {
    return This->lpVtbl->add_TextScaleFactorChanged(This,handler,cookie);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_remove_TextScaleFactorChanged(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings2* This,EventRegistrationToken cookie) {
    return This->lpVtbl->remove_TextScaleFactorChanged(This,cookie);
}
#endif
#ifdef WIDL_using_Windows_UI_ViewManagement
#define IID_IUISettings2 IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings2
#define IUISettings2Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2Vtbl
#define IUISettings2 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2
#define IUISettings2_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_QueryInterface
#define IUISettings2_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_AddRef
#define IUISettings2_Release __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_Release
#define IUISettings2_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetIids
#define IUISettings2_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetRuntimeClassName
#define IUISettings2_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_GetTrustLevel
#define IUISettings2_get_TextScaleFactor __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_get_TextScaleFactor
#define IUISettings2_add_TextScaleFactorChanged __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_add_TextScaleFactorChanged
#define IUISettings2_remove_TextScaleFactorChanged __x_ABI_CWindows_CUI_CViewManagement_CIUISettings2_remove_TextScaleFactorChanged
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif

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

/*****************************************************************************
 * IUISettings3 interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings3, 0x03021be4, 0x5254, 0x4781, 0x81,0x94, 0x51,0x68,0xf7,0xd0,0x6d,0x7b);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace ViewManagement {
                MIDL_INTERFACE("03021be4-5254-4781-8194-5168f7d06d7b")
                IUISettings3 : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE GetColorValue(
                        enum UIColorType color,
                        struct Color *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE add_ColorValuesChanged(
                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > *handler,
                        EventRegistrationToken *cookie) = 0;

                    virtual HRESULT STDMETHODCALLTYPE remove_ColorValuesChanged(
                        EventRegistrationToken cookie) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3, 0x03021be4, 0x5254, 0x4781, 0x81,0x94, 0x51,0x68,0xf7,0xd0,0x6d,0x7b)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IUISettings3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetColorValue)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 *This,
        enum __x_ABI_CWindows_CUI_CViewManagement_CUIColorType color,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *add_ColorValuesChanged)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 *This,
        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable *handler,
        EventRegistrationToken *cookie);

    HRESULT (STDMETHODCALLTYPE *remove_ColorValuesChanged)(
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 *This,
        EventRegistrationToken cookie);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3Vtbl;

interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3 {
    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUISettings3 methods ***/
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetColorValue(This,color,value) (This)->lpVtbl->GetColorValue(This,color,value)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_add_ColorValuesChanged(This,handler,cookie) (This)->lpVtbl->add_ColorValuesChanged(This,handler,cookie)
#define __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_remove_ColorValuesChanged(This,cookie) (This)->lpVtbl->remove_ColorValuesChanged(This,cookie)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_Release(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUISettings3 methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetColorValue(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,enum __x_ABI_CWindows_CUI_CViewManagement_CUIColorType color,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->GetColorValue(This,color,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_add_ColorValuesChanged(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable *handler,EventRegistrationToken *cookie) {
    return This->lpVtbl->add_ColorValuesChanged(This,handler,cookie);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_remove_ColorValuesChanged(__x_ABI_CWindows_CUI_CViewManagement_CIUISettings3* This,EventRegistrationToken cookie) {
    return This->lpVtbl->remove_ColorValuesChanged(This,cookie);
}
#endif
#ifdef WIDL_using_Windows_UI_ViewManagement
#define IID_IUISettings3 IID___x_ABI_CWindows_CUI_CViewManagement_CIUISettings3
#define IUISettings3Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3Vtbl
#define IUISettings3 __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3
#define IUISettings3_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_QueryInterface
#define IUISettings3_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_AddRef
#define IUISettings3_Release __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_Release
#define IUISettings3_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetIids
#define IUISettings3_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetRuntimeClassName
#define IUISettings3_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetTrustLevel
#define IUISettings3_GetColorValue __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_GetColorValue
#define IUISettings3_add_ColorValuesChanged __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_add_ColorValuesChanged
#define IUISettings3_remove_ColorValuesChanged __x_ABI_CWindows_CUI_CViewManagement_CIUISettings3_remove_ColorValuesChanged
#endif /* WIDL_using_Windows_UI_ViewManagement */
#endif

#endif

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

/*
 * Class Windows.UI.ViewManagement.UISettings
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_UISettings_DEFINED
#define RUNTIMECLASS_Windows_UI_ViewManagement_UISettings_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_ViewManagement_UISettings[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','U','I','S','e','t','t','i','n','g','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_UISettings[] = L"Windows.UI.ViewManagement.UISettings";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_UISettings[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','U','I','S','e','t','t','i','n','g','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_UISettings_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > interface
 */
#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_INTERFACE_DEFINED__
#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_INTERFACE_DEFINED__

DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable, 0x2dbdba9d, 0x20da, 0x519d, 0x90,0x78, 0x09,0xf8,0x35,0xbc,0x5b,0xc7);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("2dbdba9d-20da-519d-9078-09f835bc5bc7")
            ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::ViewManagement::UISettings*, ABI::Windows::UI::ViewManagement::IUISettings* >, IInspectable* >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable, 0x2dbdba9d, 0x20da, 0x519d, 0x90,0x78, 0x09,0xf8,0x35,0xbc,0x5b,0xc7)
#endif
#else
typedef struct __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectableVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable *This,
        __x_ABI_CWindows_CUI_CViewManagement_CIUISettings *sender,
        IInspectable *args);

    END_INTERFACE
} __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectableVtbl;

interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable {
    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectableVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Release(This) (This)->lpVtbl->Release(This)
/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > methods ***/
#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable* This) {
    return This->lpVtbl->Release(This);
}
/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable* This,__x_ABI_CWindows_CUI_CViewManagement_CIUISettings *sender,IInspectable *args) {
    return This->lpVtbl->Invoke(This,sender,args);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_ITypedEventHandler_UISettings_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable
#define ITypedEventHandler_UISettings_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectableVtbl
#define ITypedEventHandler_UISettings_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable
#define ITypedEventHandler_UISettings_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_QueryInterface
#define ITypedEventHandler_UISettings_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_AddRef
#define ITypedEventHandler_UISettings_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Release
#define ITypedEventHandler_UISettings_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_ui_viewmanagement_h__ */
