Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
vikk
Зарегистрирован: 13.09.2006 Сообщения: 88
|
Добавлено: Пт Июл 25, 2008 12:20 pm Заголовок сообщения: mdlText_createWide(); |
|
|
MicroStation 2004
Вот фрагмент кода, меняем заданную строку на "АБВ":
Код: |
int Modifi_Text(MSElementUnion *elP)
{
TextParamWide textParamWide;
TextSizeParam textSize;
MSWideChar wString[256*5]; // текст м.б. представлен как %%240%%241
char sText[256*5];
. . .
. . .
memset(&textSize,0,sizeof(TextSizeParam));
textSize.mode = TXT_BY_TILE_SIZE;
mdlText_extractWide(wString,NULL,NULL,NULL,&textSize,&textParamWide,NULL,elP);
. . .
. . .
// wString[0] = 0x0410;
// wString[1] = 0x0411; // Вариант 1 'АБВ'
// wString[2] = 0x0412;
// wString[3] = 0;
wString[0] = 0x00C0;
wString[1] = 0x00C1; // Вариант 2 'АБВ'
wString[2] = 0x00C2;
wString[3] = 0;
mdlText_createWide(elP,elP,wString,NULL,NULL,&textSize,&textParamWide,NULL);
return 0;
}
|
Вариант 1 -- не работает!!! с любыми шрифтами, и TTF и RSC.
Вариант 2 -- работает, даже с TTF шрифтами.
Хотя, казалось бы д.б. наоборот.
Такое впечатление, что данная функция тупо считает, что у нас 1252 кодовая страница, и не смотрит на установки windows.
Возможно ли Ustation-у явно указать какая у нас CP (1251),
коль он не обращает внимания на windows. Переменная есть какая-нибудь? |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пт Июл 25, 2008 2:53 pm Заголовок сообщения: |
|
|
А по моему так
Вариант 1 - юникод
Вариант 2 - CP1251
http://ru.wikipedia.org/wiki/Windows-1251
Насколько я знаю, микрик юникод старается не использовать |
|
Вернуться к началу |
|
|
vikk
Зарегистрирован: 13.09.2006 Сообщения: 88
|
Добавлено: Пн Июл 28, 2008 8:02 am Заголовок сообщения: |
|
|
Ustation V8 и выше практически работает только с юникодом.
Названия слоев, моделей, фрагментов - в юникод кодировке.
Функции перевода Unicode ->Multibyte
mdlCnv_convertUnicodeToMultibyte(...);
mdlCnv_convertMultibyteToUnicode(...);
плюс недокументированная функция(и)
mdlCnv_convertUnicodeToMultibyteWithCodePage(...);
Функция mdlText_createWide() на вход, по документации,
требует строку в юникод кодировке, но работает правильно только с латинскими буквами. |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пн Июл 28, 2008 9:02 am Заголовок сообщения: |
|
|
vikk писал(а): | Ustation V8 и выше практически работает только с юникодом.
Названия слоев, моделей, фрагментов - в юникод кодировке.
|
Согласен, но... (если я правильно понял) при использовании функций mdlText_xxx речь идет о создании текстовых элементов...
Вот цитата их хелпа MS 08.05.02.35:
MicroStation vector font resources are typically not encoded in Unicode. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|