Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Вопрос по выводам символов в консольном окне


Автор: erslgoeirjh 23.5.2017, 14:18
Есть оконное диалоговое MFC-приложение. Это приложение вызывает консольное окно, в котором выводятся результаты решения задачи.

Можно ли вывести в этом консольном окне заглавную (прописную) греческую букву "дельта" -- Δ ?
И можно ли вывести в этом консольном окне горизонтальную черту над латинскими буквами (например, над буквами r или v)? В том смысле, чтобы это было в одной строке?

Если да, то как это можно сделать?

Автор: vol4ek 23.5.2017, 15:55
Взять нужный файл шрифта, зарегить его в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont\

Заюзать функцию 
Код

SetCurrentConsoleFontEx()

Вывести нужные кракозябры и потом вернуть обратно старый шрифт. Както так

Автор: xvr 23.5.2017, 17:37
Можно проще. BAT файл, сохранен в UTF-8 (кодовая страница 65001)
Код

chcp 65001
echo Δ
pause
Выводит Δ в консоль.

Так что https://msdn.microsoft.com/en-us/library/windows/desktop/ms686013(v=vs.85).aspx и вывод Unicode'а через UTF-8
Или сразу писать в Unicode (через WriteConsoleW или fputws)

Автор: vol4ek 23.5.2017, 17:56
Цитата(xvr @ 23.5.2017,  17:37)
Можно проще. BAT файл, сохранен в UTF-8 (кодовая страница 65001)
Код

chcp 65001
echo Δ
pause
Выводит Δ в консоль.

Так что https://msdn.microsoft.com/en-us/library/windows/desktop/ms686013(v=vs.85).aspx и вывод Unicode'а через UTF-8
Или сразу писать в Unicode (через WriteConsoleW или fputws)

С дельтой пойдет а вот прямая над символом... ни в одном алфавите нет буквы r с такой фиговиной. Только отредактировать какойто из существующих шрифтов. например греческий.  smile 

Автор: xvr 23.5.2017, 21:12
В Unicode есть специальные символы, которые модифицируют те, что перед ними - https://en.wikipedia.org/wiki/Combining_character
В принципе прямую над символами сделать можно ( <symbol> + U+0305), проблема в том, что в консоли это не работает  smile 

Автор: vol4ek 23.5.2017, 21:31
а по мне так проще взять любой редактор шрифтов коих сейчас тыщи да и не париться  smile 

Автор: xvr 24.5.2017, 10:36
Можно. Но несколько удивляет изначальное построение программы:

Цитата(erslgoeirjh @  23.5.2017,  14:18 Найти цитируемый пост)
Есть оконное диалоговое MFC-приложение. Это приложение вызывает консольное окно, в котором выводятся результаты решения задачи.

Зачем MFC приложению понадобилась консоль? Если для возможности что то скопировать оттуда, или запустить в ней какое то другое консольное приложение, то вариант с заменой шрифта не пройдет - требуемые буквы будут только в консоли, при попытке их оттуда скопировать они неожиданно трансформируются в нечто. Если же в такой консоли что то запустить - то эти буквы могут неожиданно появиться там, где их быть не должно.
Других вариантов, когда требуется именно консоль я придумать не могу.

Так что ТС напрашивается совет не заморачиваться с консолями вообще, а выводить в нормальное Edit окно средствами GUI (в Unicode)


Автор: vol4ek 24.5.2017, 11:13
Думается ввод/вывод какихто формул или хз

Автор: erslgoeirjh 25.5.2017, 09:44
И ещё вопрос: как правильно вывести в консольное окно строку, содержащую символы Unicode?
Надо ли для этого использовать функцию WriteConsole или же достаточно использовать функцию wprintf?
И как сделать так, чтобы правильно выводились не только символы Unicode, но и символы кириллицы в такой строке в консольном окне?

Автор: erslgoeirjh 25.5.2017, 10:25
Цитата(xvr @ 23.5.2017,  21:12)
В принципе прямую над символами сделать можно ( <symbol> + U+0305), проблема в том, что в консоли это не работает  smile

Что, действительно в консольном окне не работает вывод символа Unicode комбинированной верхней горизонтальной черты (код U-0305)?

Автор: xvr 25.5.2017, 11:07
Цитата(erslgoeirjh @  25.5.2017,  09:44 Найти цитируемый пост)
или же достаточно использовать функцию wprintf?

Почти достаточно. Еще нужно позвать https://msdn.microsoft.com/ru-ru/library/tw4k6df8.aspx на stdout что бы перевести его в Unicode режим.

Цитата(erslgoeirjh @  25.5.2017,  09:44 Найти цитируемый пост)
И как сделать так, чтобы правильно выводились не только символы Unicode, но и символы кириллицы в такой строке в консольном окне?

Вы не поверите, но Unicode включает в себя и кириллицу  smile 
Если вам нужно вывести в Unicode обычную char* в текущей кодировке Windows, то воспользуйтесь спецификатором формата %S в wprintf

Цитата(erslgoeirjh @  25.5.2017,  10:25 Найти цитируемый пост)
Что, действительно в консольном окне не работает вывод символа Unicode комбинированной верхней горизонтальной черты (код U-0305)?

Выводит как 2 отдельных символа - отдельно первый символ, отдельно верхнюю горизонтальную черту (2м символом). Экспериментально проверено в Windows 7 (более поздние не пробовал)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)