|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Кирилица в WIN32 GUI приложениях независимо от настроек в контрольной панели |
|
C/C++ - [решено] Кирилица в WIN32 GUI приложениях независимо от настроек в контрольной панели
|
Будем жить, Маэстро... Сообщения: 6694 |
Профиль | Сайт | Отправить PM | Цитировать
Доброго всем здоровья. Нужна ваша помощь. Возникла необходимость написать программку, чтобы она работала на Windows XP и Widnwows Vista (если будет работать на Windows 7, будет вообще здорово, но проверить негде... Нет знакомых с семёркой). На ХР работает как часики, а на Vista не совсем. Не отображаются правильно русские символы. Скриншот приложу.
Проверял на Windows Vista Home Premium (SP1). Версия русская. Получается следующее, интерфейс на русском, и некоторые записи (описания в GroupBox) не отображают правильно кирилицу, а некоторые, на кнопках и переключателях нормально отображают, что сделать - не знаю совсем. Прошу помощи. Английский интерфейс это не вариант потому что там ещё будет ComboBox (при выборе локализации "русская Windows") в котором будет выбор текста на русском, по другому нельзя. Архив проекта прикрепляю, там находится также и исполнимый файл. Программная среда в которой разрабатывается приложение: Цитата из своего профиля:
|
||
------- Отправлено: 12:46, 14-07-2009 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Dmitrijan:
Вчера вечером почти весь вечер делал и почти пол ночи искал инфу, на Delphi\Pascal есть, на C++ практически ничего внятного не нашёл или пропустил по незнанию. Консольный компилятор есть bcc32.exe. Создавал я файл MyFont.rc, но в MyFont.res такой командой ничего не скомпилилось. Возможно программисты на Cи помогут? Хотелось бы... |
|
------- Отправлено: 16:52, 18-07-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 13:58, 19-07-2009 | #12 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
|
|
------- Отправлено: 14:47, 20-07-2009 | #13 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Drongo
Берёте текстовый файлик . Пишите туда "MY_FONT ANYOL1 "Bauhs93.ttf" " и сохраняете как 1.rc, например . Далее в Builder'e: Проект->Добавить к проекту->выбираете тип файла *.rc->находите файл 1.rc и компилите проект. Файл Bauhs93.ttf должен лежать вместе с 1.rc. Ну и пишите код приведённый Dmitrijan. |
------- Отправлено: 15:55, 20-07-2009 | #14 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Вооот! Другое дело Что-то получается, только некоторые части не могу перевести с Delphi на C++.
Delphi procedure TForm1.FormCreate(Sender: TObject); var Res : TResourceStream; begin Res := TResourceStream.Create(hInstance, 'MY_FONT', Pchar('ANYOL1')); Res.SavetoFile('Bauhs93.ttf'); Res.Free; AddFontResource(PChar('Bauhs93.ttf')); SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); end; // Для своего использования шрифта - Delphi // Res : TResourceStream; // Объявляем переменную // begin // Res := TResourceStream.Create(hInstance, 'MY_FONT', Pchar('ANYOL1')); // Res.SavetoFile('Bauhs93.ttf'); // Res.Free; // освобождение ресурсов - деструктор. // Работает только эта часть----------------------------- AddFontResourceA("verdana.ttf"); SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); |
------- Отправлено: 18:11, 20-07-2009 | #15 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 14:22, 23-07-2009 | #16 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Немного не скомпилилось, ошибка в этой строке
Цитата ganselo:
Цитата:
... void __fastcall TForm1::FormCreate(TObject *Sender) { TResourceStream *res = new TResourceStream((int)HInstance, "MY_FONT", "ANYOL1"); res->SaveToFile("verdana.ttf"); AddFontResourceA("verdana.ttf"); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); }... ganselo, Спасибо за помощь. |
||
------- Последний раз редактировалось Drongo, 23-07-2009 в 17:14. Причина: Добавил ещё одну ссылку. Отправлено: 16:46, 23-07-2009 | #17 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Проверил на английской Windows, к сожалению с таким кодом ничего не получилось
всё равно русские символы выводит вопросительными знаками. Как же всё-таки включить русский шрифт в программу? Что я не так делаю или пропускаю? |
------- Отправлено: 17:35, 28-07-2009 | #18 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать В ходе личной переписки выяснили, версия ОС не причём.
Автору был дал совет использовать Юникод в программе. Однако как выяснилось, мой пример оказался не до конца Юникодным, по этому, его корректное отображение зависело от того, что указанно в Контрольной панели в Региональных настройках. Как оказалось, мало использовать wchar_t вместо char, нужно и саму функцию входа в программу использовать соответственную: вместо WinMain - wWinMain. К сожалению для консольных версий прог использование wmain вместо main не даёт независимость от того что установлено в Контрольной панели в Региональных настройках. Консоль не использует Юникод вывод. |
Отправлено: 22:02, 01-10-2009 | #19 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Admiral, Спасибо за помощь и проявленный интерес к проблеме.
Цитата Admiral:
Я добавил перед функцией WinMain - символ - wWinMain. Попробовал откомпилировать, ошибка компоновщика. Что WinMain ссылается на COW32.OBJ [Компоновщик Ошибка] Unresolved external 'WinMain' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\C0W32.OBJ //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("Unit1.cpp", Form1); //--------------------------------------------------------------------------- WINAPI wWinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //--------------------------------------------------------------------------- Цитата Admiral:
Цитата Admiral:
Установить атрибуты могу: Архивный, сктрытый и т.д. Ещё поискал в гугле, подумал, может нужно эту функцию использовать - GetFileAttributesW ? Хотя никогда использовать её не приходилось. |
|||
------- Последний раз редактировалось Drongo, 02-10-2009 в 15:26. Причина: Убрал ссылку на закрытый форум... Отправлено: 12:49, 02-10-2009 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Конкурс - [решено] 270 настроек панели управления в одной папке | Smarty | Microsoft Windows 7 | 28 | 13-02-2012 08:38 | |
Не работает GUI после выхода другова GUI | sashadeg | AutoIt | 3 | 15-05-2009 22:03 | |
[решено] проверка контрольной суммы | nix_lamer | Общий по Linux | 1 | 17-01-2007 08:40 |
|