Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по выводам символов в консольном окне 
:(
    Опции темы
erslgoeirjh
Дата 23.5.2017, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



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

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

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

PM MAIL   Вверх
vol4ek
Дата 23.5.2017, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



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

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

SetCurrentConsoleFontEx()

Вывести нужные кракозябры и потом вернуть обратно старый шрифт. Както так
PM MAIL ICQ   Вверх
xvr
Дата 23.5.2017, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



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

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

Так что SetConsoleCP и вывод Unicode'а через UTF-8
Или сразу писать в Unicode (через WriteConsoleW или fputws)

PM MAIL   Вверх
vol4ek
Дата 23.5.2017, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



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

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

Так что SetConsoleCP и вывод Unicode'а через UTF-8
Или сразу писать в Unicode (через WriteConsoleW или fputws)

С дельтой пойдет а вот прямая над символом... ни в одном алфавите нет буквы r с такой фиговиной. Только отредактировать какойто из существующих шрифтов. например греческий.  smile 
PM MAIL ICQ   Вверх
xvr
Дата 23.5.2017, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



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

PM MAIL   Вверх
vol4ek
Дата 23.5.2017, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



а по мне так проще взять любой редактор шрифтов коих сейчас тыщи да и не париться  smile 
PM MAIL ICQ   Вверх
xvr
Дата 24.5.2017, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



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

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

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

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


PM MAIL   Вверх
vol4ek
Дата 24.5.2017, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



Думается ввод/вывод какихто формул или хз
PM MAIL ICQ   Вверх
erslgoeirjh
Дата 25.5.2017, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
erslgoeirjh
Дата 25.5.2017, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



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

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

PM MAIL   Вверх
xvr
Дата 25.5.2017, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: нет
Всего: 223



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

Почти достаточно. Еще нужно позвать _setmode на 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 (более поздние не пробовал)


Это сообщение отредактировал(а) xvr - 25.5.2017, 11:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1554 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.