첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
0.00MB

▶ COORD.cs

using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// 좌표
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct COORD
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// X
        /// </summary>
        public short X;

        /// <summary>
        /// Y
        /// </summary>
        public short Y;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - COORD(x, y)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="x">X</param>
        /// <param name="y">Y</param>
        public COORD(short x, short y)
        {
            X = x;
            Y = y;
        }

        #endregion
    }
}

 

728x90

 

▶ CONSOLE_FONT_INFO_EX.cs

using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// 콘솔 폰트 정보 확장
    /// </summary>
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public unsafe struct CONSOLE_FONT_INFO_EX
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// 크기
        /// </summary>
        public uint Size;

        /// <summary>
        /// 폰트
        /// </summary>
        public uint Font;

        /// <summary>
        /// 폰트 크기
        /// </summary>
        public COORD FontSize;

        /// <summary>
        /// 폰트 패밀리
        /// </summary>
        public int FontFamily;

        /// <summary>
        /// 폰트 가중치
        /// </summary>
        public int FontWeight;

        /// <summary>
        /// 페이스명
        /// </summary>
        public fixed char FaceName[ConsoleHelper.LF_FACESIZE];

        #endregion
    }
}

 

300x250

 

▶ ConsoleHelper.cs

using System;
using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// 콘솔 헬퍼
    /// </summary>
    public static class ConsoleHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 표준 핸들 구하기 - GetStdHandle(type)

        /// <summary>
        /// 표준 핸들 구하기
        /// </summary>
        /// <param name="type">타입</param>
        /// <returns>표준 핸들</returns>
        [DllImport("kernel32", SetLastError = true)]
        private static extern IntPtr GetStdHandle(int type);

        #endregion
        #region 현재 콘솔 폰트 설정하기 - SetCurrentConsoleFontEx(outputHandle, maximumWindow, info)

        /// <summary>
        /// 현재 콘솔 폰트 설정하기
        /// </summary>
        /// <param name="outputHandle">출력 핸들</param>
        /// <param name="maximumWindow">최대 창 크기 글꼴 정보 여부</param>
        /// <param name="info">콘솔 폰트 정보 확장</param>
        /// <returns>처리 결과</returns>
        [DllImport("kernel32", SetLastError = true)]
        private static extern bool SetCurrentConsoleFontEx(IntPtr outputHandle, bool maximumWindow, ref CONSOLE_FONT_INFO_EX info);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// INVALID_HANDLE_VALUE
        /// </summary>
        private static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Instance
        //////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// LF_FACESIZE
        /// </summary>
        public const int LF_FACESIZE = 32;

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// STD_OUTPUT_HANDLE
        /// </summary>
        private const int STD_OUTPUT_HANDLE = -11;

        /// <summary>
        /// TMPF_TRUETYPE
        /// </summary>
        private const int TMPF_TRUETYPE = 4;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 폰트 설정하기 - SetFont(fontName, fontWidth, fontheight)

        /// <summary>
        /// 폰트 설정하기
        /// </summary>
        /// <param name="fontName">폰트명</param>
        /// <param name="fontWidth">폰트 너비</param>
        /// <param name="fontheight">폰트 높이</param>
        public static void SetFont(string fontName, short fontWidth, short fontheight)
        {
            unsafe
            {
                IntPtr windowHandle = GetStdHandle(STD_OUTPUT_HANDLE);

                if(windowHandle != INVALID_HANDLE_VALUE)
                {
                    CONSOLE_FONT_INFO_EX info = new CONSOLE_FONT_INFO_EX();

                    info.Size       = (uint)Marshal.SizeOf(info);
                    info.FontSize   = new COORD(fontWidth, fontheight);
                    info.FontFamily = TMPF_TRUETYPE;

                    IntPtr pointer = new IntPtr(info.FaceName);

                    Marshal.Copy(fontName.ToCharArray(), 0, pointer, fontName.Length);

                    SetCurrentConsoleFontEx(windowHandle, false, ref info);
                }
            }
        }

        #endregion
    }
}

 

반응형

 

▶ Program.cs

using System;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            ConsoleHelper.SetFont("궁서체", 8, 16);

            Console.WriteLine("가나다라마바사아자차카타파하1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");

            Console.ReadKey(false);
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요