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