информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяГде водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++] XP и MFC-класс CToolBar 15.04.04 01:25  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Не работают нормально русские «подсказки» ToolTip для мфц-тулбара (CToolBar).
«Ненормальность» в том, что вместо русских букв в окошках тултипов появляются загадочные символы ;)), схожие то ли с греческими, то ли марсианскими. Чего надо сделать, чтобы по-русски говорил тултип?

Проект ранее был сделан в VC 7.0 (v.7.0.9466), Framework 1.0 (v.1.0.3705). Компилировалось и работало на W2k Prof (rus). Давно. Работало всё нормально.

Купил лаптоп с предустановленным XP English. Установил тот же компилер. Компильнул….В результате имеем ненормальности в поведении ToolTip, о которых сказано выше.

В части региональных настроек ОС – следующее. Сейчас установлены региональные настройки для даты, представления чисел и дат – English (United States). Не работает тултип…. Если установить региональные настройки – Russian, то всё начинает работать нормально. Здесь под региональными настройками имеется в виду значение строки в комбобоксе группы контролов “Standards and formats” на закладке “Regional Options” аплета “Regional and Language Options” в папке “Control Panel” XP. Есть причины, по которым хотелось бы оставить основные настройки ОС английскими. Кроме того, нет ВИДИМЫХ ПРИЧИН, по которым надо обязательно делать русские региональные настройки. А именно:

- Приложения, скомпилированные в BCB++ на этом же компе, работают нормально вне зависимости от региональных настроек (толтипы «говорят» по-русски, но там естественно свои vcl-толбары, а не отстой мфц M$). Поэтому нельзя сказать, что есть некие ошибки системного характера, и следует обязательно установить русские региональные настройки по умолчанию.

- Тестовые приложения, собранные в том же .NET, но в C#, и имеющие тулбар с тултипами, работают на ура. Нормально понимается рашен для толбара M$.

- Приложение M$С++, о котором речь, в котором этот несчастный толбар с неправильно работающим тултипом, в остальном прекрасно работает с русскими символами. Примечательно, что «синхронные подсказки» нормально работают в мфц – CStatusBar, который там же. Т.е. наводим мышу на кнопку тулбара – в тултипе кнопки видим абракадабру, а в статусбаре - вполне приличные русские слова. Это говорит о том, что строки из ресурсов нормально грузятся и отображаются в принципе. Поэтому и на ресурсы тоже не приходится грешить. В принципе, все контролы в этом проекте, что подгружают русские символы из ресурсов, работают нормально, вне зависимости от региональных настроек ОС.

- Сам, ToolTipCtrl API работает нормально (именно он по идее и оборачивается классами мфц). То, что с тултип-контролом shell всё в порядке говорит хотя бы тот факт, что для мфц-контролов (CEdit, CButton, …) в этом приложении, для которых подсобачен ToolTipCtrl WinAPI, мы имеем нормальные русские символы. Правда, последние грузятся из констант, а не из ресурсов (про редактирование ресурсов - позже).

- В принципе, сам ToolBarCtrl WinAPI с апишеым тулбаром работает нормально (именно его по идее должен оборачивать CToolBar MFC). Проверено. Т.е. если в приложении заменить CToolBar на свою реализацию обёртки ToolBarCtrl shell, то всё работает прекрасно (что, увы, и пришлось пока сделать). Русские символы нормально отображаются. И это не зависит от того, откуда и как мы грузим строки подсказок в окошке тултипа – или из констант, по ходу пьесы, или из ресурсов. При любой региональной настройке ОС тултипы тулбара WinAPI работают нормально. Т.е. как бы и для CToolBar MFC должно всё работать. Это потому, что где-то попадалось, что CToolBar MFC оборачивает ToolTipCtrl SHELL. Если работает контрол SHELL, то должна корректно работать и его обёртка (вряд ли кто будет сомневаться в корректности программистов M$). Ан нет. Не работает ;(.

Дополнительно, для пользы следствия могу сообщить следующее. Проект использует Multi-byte Character Set (_MBCS, что по умолчанию для проектов MFC ). Командная строка такова:
/Od /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "" /D "_AFXDLL" /Gm /EHsc /RTC1 /MDd /Zc:wchar_t /Yu"stdafx.h" /Fp"Debug/Gkm.pch" /Fo"Debug/" /Fd"Debug/vc70.pdb" /W3 /nologo /c /Wp64 /ZI /TP

Строки в ресурсах расположены «в русской секции» (cp 1251).

Вот, что может наводить на грустные мысли…. Для нормального ввода в файл ресурсов русских строк невозможно использовать IDE. Там, в диалоговых окошках для ввода строк и в редакторе ресурсов после ввода появляются аброказябры вместо русского. Т.е. пока вводишь строку – печатаются русские символы, как только нажимаешь ENTER для завершения ввода - строка принимает невообразимый вид. Поэтому, приходится «руками» редактировать rc-файл ресурсов.

ПС.
Не думаю, что указанный гимор c тулбаром связан с контролами COMCTRL32.DLL XP. Если убить в проекте манифест, то имеем теже яйца только с видом W2k. Те же проблемы остаются. Надо бы найти способ, как использовать именно тулбар мфц, а не WinAPI. Апишный толбар, конечно, нормально работает. Но там может в перспективе добавится другой гимор, если он встраивается в проект с каркасом мфц, вместо CToolBar (не в проект с контролами MFC, а с каркасом MFC).

Как это делать?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach