При использовании только символов ASCII все символы и заданные значения цвета отображаются корректно, однако, всякий раз, когда я использую символы Extended ASCII или UNICODE, я получаю это сообщение об ошибке (и мой компилятор g ++ указывает, что проблема не в символе ASCII):
warning: multi-character character constant [-Wmultichar]
error: narrowing conversion of '14849683' from 'int' to 'WCHAR' {aka 'wchar_t'} inside { } [-Wnarrowing]
Я использую параметр -lgdi32
в моей команде компиляции.
Я использую WriteConsoleOutputA
или WriteConsoleOutputW
, по-видимому, не имеет никакого значения.
Я считаю, что ширина символа массива CHAR_INFO по умолчанию равна 8 битам, поэтому я думаю, что это следует изменить, но я ничего не могу найти в документации по Windows Console API.
Итак, чтобы быть понятным, все # символы отображаются правильно, но если я использую такие символы, как: ░ или ┐, я получаю сообщение об ошибке выше.
CHAR_INFO map[400] = {
'#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C,'#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', 0x002C,
'#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C,'#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C, '#', 0x002C
};
COORD coordinateBufferSize;
coordinateBufferSize.Y = 10;
coordinateBufferSize.X = 10;
COORD topLeftCoordinate;
topLeftCoordinate.Y = 0;
topLeftCoordinate.X = 0;
PSMALL_RECT srcWriteRect;
srcWriteRect->Top = 10; // Number of rows to the top
srcWriteRect->Left = 10; // Numbers of columns to the side
srcWriteRect->Bottom = 19;
srcWriteRect->Right = 19;
HANDLE oldScreenBuffer, newScreenBuffer;
oldScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);
newScreenBuffer = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
BOOL succes = WriteConsoleOutputA(
newScreenBuffer, // The new ScreenBuffer
map, // The char array we want to display
coordinateBufferSize, //
topLeftCoordinate,
srcWriteRect
);
SetConsoleActiveScreenBuffer(newScreenBuffer);