Я играл с созданием игрового движка в командной строке Windows, в основном для образовательных целей и посмотрим, как далеко я могу его продвинуть.Я только что наткнулся на ошибку, которую не могу понять, как ее решить.
public ConsoleEngine(int width = 32, int height = 32, int fontW = 8, int fontH = 8) {
Console.SetWindowSize(width, height);
Console.SetBufferSize(width, height); < IOException: 'The parameter is incorrect'
Console.CursorVisible = false;
ConsoleBuffer = new ConsoleBuffer(width, height);
KeyBuffer = new KeyBuffer();
ConsoleFontSize.SetFontSize((short)fontW, (short)fontH);
...
}
Line 3
выдает System.IO.IOException
с сообщением The parameter is incorrect.
.Я считаю, Line 9
, что вызвало ошибку в первую очередь.Чтобы кратко объяснить, ConsoleFontSize.SetFontSize()
предназначен для изменения размера шрифта шрифта.Мне удалось заставить его работать в целом, но когда я указал от FaceName
до "Consolas"
, это сработало один раз, но затем начало выдавать мне эту ошибку.С тех пор я не смог заставить его работать снова, неважно, если я закомментирую Line 3
или Line 9
.
public static int SetFontSize(short sizeX, short sizeY) {
IntPtr hConsoleOutput = ConsoleHelper.GetStdHandle(-11);
if (hConsoleOutput == new IntPtr(-1)) {
return Marshal.GetLastWin32Error();
}
ConsoleHelper.CONSOLE_FONT_INFO_EX cfi = new ConsoleHelper.CONSOLE_FONT_INFO_EX();
cfi.cbSize = (uint)Marshal.SizeOf(cfi);
cfi.nFont = 0;
cfi.dwFontSize.X = sizeX;
cfi.dwFontSize.Y = sizeY;
//cfi.FaceName = "Raster";
//cfi.FaceName = "Consolas";
ConsoleHelper.SetCurrentConsoleFontEx(hConsoleOutput, false, ref cfi);
return 0;
}
SetFontSize использует ConsoleHelper, оболочку для функций "kernel32.dll":
[DllImport("kernel32.dll", SetLastError = true)]
public static extern Int32 SetCurrentConsoleFontEx(
IntPtr ConsoleOutput,
bool MaximumWindow,
ref CONSOLE_FONT_INFO_EX ConsoleCurrentFontEx);
Я знаю, что ни ширина, ни переменная высоты не выходят за границы.Я пытался изменить имя лица на других (например, Raster
), но безрезультатно.Я размышляю, не мог ли я испортить указатель на Console
, но у меня есть немного опыта в этой области, чтобы быть уверенным.
Пожалуйста, прокомментируйте дополнительные детали исключения, не был уверен, что будетбыть необходимым.