C# - 콘솔 폰트 크기 변경하기 SetCurrentConsoleFontEx

2025. 10. 13. 18:13·C#

C#의 콘솔 앱은 기본적으로 Consolas 폰트, 16픽셀 내외의 크기로 표시된다.

하지만 콘솔 게임이나 텍스트 UI를 구현할 때는, 글자 폭과 높이를 세밀하게 조정해야 한다.

이를 위해 Windows API(karnel32.dll)을 호출해 콘솔의 폰트를 직접 변경할 수 있다.

 

필자는 텍스트 셀의 크기를 많이 줄여서 실제 픽셀처럼 사용하기 위해 이 기능을 사용했다.

 


 

Windows API를 통한 콘솔 제어

C#의 System.Console 클래스는 기본적인 출력 기능만 제공한다.

폰트 크기, 폭, 이름 등을 직접 바꾸는 기능은 없다.

 

따라서 폰트를 조정하기 위해선 Win32 API를 직접 호출해야 하는데

이때 C#에서 C/C++ DLL 함수를 호출하기 위해 사용하는 기능이 바로 P/Invoke (Platform Invoke) 다.

 

 

아래는 전체 코드 구조다.

using System;
using System.Runtime.InteropServices;

namespace WeaponMasterDefense
{
    public static class ConsoleFontManager
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool SetCurrentConsoleFontEx(
            IntPtr hConsoleOutput, bool bMaximumWindow, ref CONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr GetStdHandle(int nStdHandle);

        private const int STD_OUTPUT_HANDLE = -11;

        [StructLayout(LayoutKind.Sequential)]
        public struct COORD
        {
            public short X;
            public short Y;
        }

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public struct CONSOLE_FONT_INFOEX
        {
            public uint cbSize;
            public uint nFont;
            public COORD dwFontSize;
            public int FontFamily;
            public int FontWeight;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string FaceName;
        }

        // 폰트 크기 설정
        public static void SetFontSize(short width, short height, string font = "Consolas")
        {
            IntPtr hnd = GetStdHandle(STD_OUTPUT_HANDLE);

            CONSOLE_FONT_INFOEX info = new CONSOLE_FONT_INFOEX();
            info.cbSize = (uint)Marshal.SizeOf(info);
            info.FaceName = font;
            info.dwFontSize = new COORD { X = width, Y = height };

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

 

 

 

실제 사용 예시는 아래와 같다

class Program
{
    static void Main()
    {
        ConsoleFontManager.SetFontSize(8, 16, "Consolas");

        Console.WriteLine("폰트 크기 변경 완료!");
        Console.ReadKey();
    }
}

 

 

줄여진 폰트로 아스키아트로 문자를 그려보았더니

 

원래 문자보다 1/4 정도 크기가 줄어서 제법 괜찮게 표현된 거 같다.

참고로 아래쪽의 PRESS ANY BUTTON 부분도 전부 원래 문자가 아니라 패턴으로 만든 거다.

 

문제는 폰트 크기를 줄일 뿐, 최대 버퍼 길이는 그대로이기에 이것 만으로 픽셀처럼 문자를 작게 활용하는 건 한계가 있는 듯 하다.

'C#' 카테고리의 다른 글

C# - GetAsnycKeyState() 기반 실시간 키 입력 처리  (0) 2025.10.14
C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지  (1) 2025.10.14
C# - 메모리 구조, GC  (0) 2025.10.13
C# - 정렬 알고리즘 (Sorting Algoritm) : 버블/선택/삽입/병합/퀵 정렬  (0) 2025.10.13
C# - 피셔 예이츠 셔플 (Fisher Yates Shuffle)  (0) 2025.10.13
'C#' 카테고리의 다른 글
  • C# - GetAsnycKeyState() 기반 실시간 키 입력 처리
  • C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지
  • C# - 메모리 구조, GC
  • C# - 정렬 알고리즘 (Sorting Algoritm) : 버블/선택/삽입/병합/퀵 정렬
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    inputsystem
    Network
    C#
    delegate
    interface
    useState
    stack
    firebase
    최적화
    추상 클래스
    function
    클래스
    struct
    콘솔
    네트워크
    터미널
    Design Pattern
    스택
    console
    유니티
    Queue
    게임
    Abstract
    list
    큐
    Photon
    자료구조
    class
    unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
C# - 콘솔 폰트 크기 변경하기 SetCurrentConsoleFontEx
상단으로

티스토리툴바