Строки в wxWidgets 3.0

September 11th, 2009 Begemot Posted in Oбщее

Тут в комментариях к посту о wxWidgets 3.0 возник вопрос, о том как теперь писать строковые литералы. Вопрос интересные, изменения там существенные и я до сих пор до конца не понимаю, как все таки правильно, поэтому  решил сегодня немного поэкспериментировать с этим вопросом:

wxMessageBox(“тест test”);

Это работает, но это получается ANSI строка, можно использовать только символы текущей локали(ну и конечно первые 127). Добавив реально юникодный текст

wxMessageBox(“öffnen вікно привет Donnée rápido test”);

Получаем несколько warningов C4566 и кривой текст на экране.

В общем что бы работало надо писать одно из трех L””, _T(“”), wxT(“”) – это все сводится к L””. Если нужна локализация тогда так

wxMessageBox(_(L”öffnen вікно привет Donnée rápido test”));

Что не очень удобно, может введут новый макрос который будет делать сразу два дела… Или может он уже есть но я не знаю.

В итоге, если я правильно понимаю, картина такая – если у нас в литерале только английские буквы – пишем просто “text” или _(“text”), в противном случае L”text” или _(L”text”)(вместо L можно использовать любой из двух старых макросов _T()\wxT()). Весь старый код использующий wxT() будет отлично работать.

Related:

Posted in Oбщее | Tags: ,

6 Responses to “Строки в wxWidgets 3.0”

  1. > одно из трех L””, _T(“”), _T(“”)
    получается – из двух. Третье, видимо, wxT(“”)?

  2. Да, опечатался, поправил, спасибо 🙂

  3. Да, это решает проблему с русским текстом. Вообще то, Ctrl+R и замена _(” на _(L” во всем проекте занимает пару секунд времени, но неприятный осадок все равно остался…

  4. А отчего осадочек? никто и не обещал полную обратную совместимость… о том что полностью меняется все внутренняя кухня работы со строками известно давно.

    Да и вообще если в приложении планируется локализация, то писать русские литерары – моветон 🙂

  5. Begemot: Да и вообще если в приложении планируется локализация, то писать русские литерары – моветон

    зато как удобно!!! 🙂
    Осадочек в основном из-за того, что ужесточаются требования. вот раньше можно было писать хоть на китайском – теперь для этого требуются лишние телодвижения.

  6. дык это требования не wxWidgets, зачем обижаешь ее ?:)
    Попробуй написать std::wstring = “текст на китайском”