/*** Autogenerated by WIDL 11.12 from include/windows.ui.text.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_text_h__
#define __windows_ui_text_h__

/* Forward declarations */

#ifndef ____FIReference_1_UnderlineType_FWD_DEFINED__
#define ____FIReference_1_UnderlineType_FWD_DEFINED__
typedef interface __FIReference_1_UnderlineType __FIReference_1_UnderlineType;
#ifdef __cplusplus
#define __FIReference_1_UnderlineType ABI::Windows::Foundation::IReference<ABI::Windows::UI::Text::UnderlineType >
#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.globalization.h>

#ifdef __cplusplus
extern "C" {
#endif

#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__
#define ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            namespace Text {
                enum UnderlineType {
                    UnderlineType_Undefined = 0,
                    UnderlineType_None = 1,
                    UnderlineType_Single = 2,
                    UnderlineType_Words = 3,
                    UnderlineType_Double = 4,
                    UnderlineType_Dotted = 5,
                    UnderlineType_Dash = 6,
                    UnderlineType_DashDot = 7,
                    UnderlineType_DashDotDot = 8,
                    UnderlineType_Wave = 9,
                    UnderlineType_Thick = 10,
                    UnderlineType_Thin = 11,
                    UnderlineType_DoubleWave = 12,
                    UnderlineType_HeavyWave = 13,
                    UnderlineType_LongDash = 14,
                    UnderlineType_ThickDash = 15,
                    UnderlineType_ThickDashDot = 16,
                    UnderlineType_ThickDashDotDot = 17,
                    UnderlineType_ThickDotted = 18,
                    UnderlineType_ThickLongDash = 19
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CUI_CText_CUnderlineType {
    UnderlineType_Undefined = 0,
    UnderlineType_None = 1,
    UnderlineType_Single = 2,
    UnderlineType_Words = 3,
    UnderlineType_Double = 4,
    UnderlineType_Dotted = 5,
    UnderlineType_Dash = 6,
    UnderlineType_DashDot = 7,
    UnderlineType_DashDotDot = 8,
    UnderlineType_Wave = 9,
    UnderlineType_Thick = 10,
    UnderlineType_Thin = 11,
    UnderlineType_DoubleWave = 12,
    UnderlineType_HeavyWave = 13,
    UnderlineType_LongDash = 14,
    UnderlineType_ThickDash = 15,
    UnderlineType_ThickDashDot = 16,
    UnderlineType_ThickDashDotDot = 17,
    UnderlineType_ThickDotted = 18,
    UnderlineType_ThickLongDash = 19
};
#ifdef WIDL_using_Windows_UI_Text
#define UnderlineType __x_ABI_CWindows_CUI_CText_CUnderlineType
#endif /* WIDL_using_Windows_UI_Text */
#endif

#endif /* ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CUI_CText_CUnderlineType __x_ABI_CWindows_CUI_CText_CUnderlineType;
#endif /* __cplusplus */

#ifndef ____FIReference_1_UnderlineType_FWD_DEFINED__
#define ____FIReference_1_UnderlineType_FWD_DEFINED__
typedef interface __FIReference_1_UnderlineType __FIReference_1_UnderlineType;
#ifdef __cplusplus
#define __FIReference_1_UnderlineType ABI::Windows::Foundation::IReference<ABI::Windows::UI::Text::UnderlineType >
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IReference<ABI::Windows::UI::Text::UnderlineType > interface
 */
#ifndef ____FIReference_1_UnderlineType_INTERFACE_DEFINED__
#define ____FIReference_1_UnderlineType_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIReference_1_UnderlineType, 0x1b63ec17, 0x7b2b, 0x59fe, 0xab,0x9d, 0xb6,0x0e,0xa4,0xf9,0xc9,0xb8);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("1b63ec17-7b2b-59fe-ab9d-b60ea4f9c9b8")
            IReference<ABI::Windows::UI::Text::UnderlineType > : IReference_impl<ABI::Windows::UI::Text::UnderlineType >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIReference_1_UnderlineType, 0x1b63ec17, 0x7b2b, 0x59fe, 0xab,0x9d, 0xb6,0x0e,0xa4,0xf9,0xc9,0xb8)
#endif
#else
typedef struct __FIReference_1_UnderlineTypeVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Value)(
        __FIReference_1_UnderlineType *This,
        __x_ABI_CWindows_CUI_CText_CUnderlineType *value);

    END_INTERFACE
} __FIReference_1_UnderlineTypeVtbl;

interface __FIReference_1_UnderlineType {
    CONST_VTBL __FIReference_1_UnderlineTypeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIReference_1_UnderlineType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIReference_1_UnderlineType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIReference_1_UnderlineType_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIReference_1_UnderlineType_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIReference_1_UnderlineType_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIReference_1_UnderlineType_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
#define __FIReference_1_UnderlineType_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIReference_1_UnderlineType_QueryInterface(__FIReference_1_UnderlineType* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIReference_1_UnderlineType_AddRef(__FIReference_1_UnderlineType* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIReference_1_UnderlineType_Release(__FIReference_1_UnderlineType* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIReference_1_UnderlineType_GetIids(__FIReference_1_UnderlineType* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIReference_1_UnderlineType_GetRuntimeClassName(__FIReference_1_UnderlineType* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIReference_1_UnderlineType_GetTrustLevel(__FIReference_1_UnderlineType* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
static inline HRESULT __FIReference_1_UnderlineType_get_Value(__FIReference_1_UnderlineType* This,__x_ABI_CWindows_CUI_CText_CUnderlineType *value) {
    return This->lpVtbl->get_Value(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IReference_UnderlineType IID___FIReference_1_UnderlineType
#define IReference_UnderlineTypeVtbl __FIReference_1_UnderlineTypeVtbl
#define IReference_UnderlineType __FIReference_1_UnderlineType
#define IReference_UnderlineType_QueryInterface __FIReference_1_UnderlineType_QueryInterface
#define IReference_UnderlineType_AddRef __FIReference_1_UnderlineType_AddRef
#define IReference_UnderlineType_Release __FIReference_1_UnderlineType_Release
#define IReference_UnderlineType_GetIids __FIReference_1_UnderlineType_GetIids
#define IReference_UnderlineType_GetRuntimeClassName __FIReference_1_UnderlineType_GetRuntimeClassName
#define IReference_UnderlineType_GetTrustLevel __FIReference_1_UnderlineType_GetTrustLevel
#define IReference_UnderlineType_get_Value __FIReference_1_UnderlineType_get_Value
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIReference_1_UnderlineType_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_ui_text_h__ */
