HFONT
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace Windows.Win32.Graphics.Gdi
{
    [DebuggerDisplay("{Value}")]
    [GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
    internal readonly struct HFONT : IEquatable<HFONT>
    {
        internal unsafe readonly void* Value;
        internal static HFONT Null => default(HFONT);
        internal unsafe bool IsNull => Value == null;
        internal unsafe HFONT(void* value)
        {
            Value = value;
        }
        internal unsafe HFONT(IntPtr value)
        {
            this = new HFONT((void*)(long)value);
        }
        public unsafe static implicit operator void*(HFONT value)
        {
            return value.Value;
        }
        public unsafe static explicit operator HFONT(void* value)
        {
            return new HFONT(value);
        }
        public unsafe static bool operator ==(HFONT left, HFONT right)
        {
            return left.Value == right.Value;
        }
        public static bool operator !=(HFONT left, HFONT right)
        {
            return !(left == right);
        }
        public unsafe bool Equals(HFONT other)
        {
            return Value == other.Value;
        }
        public override bool Equals(object obj)
        {
            if (obj is HFONT) {
                HFONT other = (HFONT)obj;
                return Equals(other);
            }
            return false;
        }
        public unsafe override int GetHashCode()
        {
            return (int)Value;
        }
        public unsafe override string ToString()
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(2, 1);
            defaultInterpolatedStringHandler.AppendLiteral("0x");
            defaultInterpolatedStringHandler.AppendFormatted((UIntPtr)Value, "x");
            return defaultInterpolatedStringHandler.ToStringAndClear();
        }
        public unsafe static implicit operator IntPtr(HFONT value)
        {
            return new IntPtr(value.Value);
        }
        public unsafe static explicit operator HFONT(IntPtr value)
        {
            return new HFONT(value.ToPointer());
        }
        public unsafe static explicit operator HFONT(UIntPtr value)
        {
            return new HFONT(value.ToPointer());
        }
        public unsafe static implicit operator HGDIOBJ(HFONT value)
        {
            return new HGDIOBJ(value.Value);
        }
    }
}