/*** Autogenerated by WIDL 8.17 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__ */
