можно получить / установить размер шрифта консоли в c # .net? - PullRequest
13 голосов
/ 02 июля 2011

Я видел сообщения об изменении шрифта консоли истинного типа, цветов консоли (rgb), но ничего о настройке или получении размера шрифта консоли.edit: причина = сетка выводится на консоль, сетка имеет много столбцов, лучше вписывается в мелкий шрифт, задаваясь вопросом, возможно ли изменить во время выполнения, вместо того, чтобы позволить стандартным или настроенным шрифтам принимать приоритет / переопределять наследование.

Ответы [ 2 ]

7 голосов
/ 02 июля 2011

Может быть эта статья может вам помочь

ConsoleHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;

namespace ConsoleExtender {
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct ConsoleFont {
        public uint Index;
        public short SizeX, SizeY;
    }

    public static class ConsoleHelper {
        [DllImport("kernel32")]
        public static extern bool SetConsoleIcon(IntPtr hIcon);

        public static bool SetConsoleIcon(Icon icon) {
            return SetConsoleIcon(icon.Handle);
        }

        [DllImport("kernel32")]
        private extern static bool SetConsoleFont(IntPtr hOutput, uint index);

        private enum StdHandle {
            OutputHandle = -11
        }

        [DllImport("kernel32")]
        private static extern IntPtr GetStdHandle(StdHandle index);

        public static bool SetConsoleFont(uint index) {
            return SetConsoleFont(GetStdHandle(StdHandle.OutputHandle), index);
        }

        [DllImport("kernel32")]
        private static extern bool GetConsoleFontInfo(IntPtr hOutput, [MarshalAs(UnmanagedType.Bool)]bool bMaximize, 
            uint count, [MarshalAs(UnmanagedType.LPArray), Out] ConsoleFont[] fonts);

        [DllImport("kernel32")]
        private static extern uint GetNumberOfConsoleFonts();

        public static uint ConsoleFontsCount {
            get {
                return GetNumberOfConsoleFonts();
            }
        }

        public static ConsoleFont[] ConsoleFonts {
            get {
                ConsoleFont[] fonts = new ConsoleFont[GetNumberOfConsoleFonts()];
                if(fonts.Length > 0)
                    GetConsoleFontInfo(GetStdHandle(StdHandle.OutputHandle), false, (uint)fonts.Length, fonts);
                return fonts;
            }
        }

    }
}

Вот как использовать ее для отображения шрифтов истинного типа для консоли,

static void Main(string[] args) {
   var fonts = ConsoleHelper.ConsoleFonts;
   for(int f = 0; f < fonts.Length; f++)
      Console.WriteLine("{0}: X={1}, Y={2}",
         fonts[f].Index, fonts[f].SizeX, fonts[f].SizeY);

   ConsoleHelper.SetConsoleFont(5);
   ConsoleHelper.SetConsoleIcon(SystemIcons.Information);
}

Важнейшие функции: SetConsoleFont, GetConsoleFontInfo и GetNumberOfConsoleFonts.Они не имеют документов, поэтому используйте их на свой страх и риск.

0 голосов
/ 02 июля 2011

Консоль не поддерживает изменение размера шрифта во время выполнения. Список доступных методов для изменения текущих настроек окон консоли можно найти на MSDN . Насколько я понимаю, это потому, что:

  1. Консоль не является расширенным текстовым интерфейсом, то есть не может отображать несколько шрифтов или размеры шрифтов.
  2. Как заявляет Нолдорин, это должен решать пользователь, например, человек с проблемами зрения может выбрать большой размер шрифта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...