информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеВсе любят медСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный сбой Azure и других сервисов... 
 Серьезный сбой AWS положил множество... 
 Фишинговая атака на Python-разработчиков 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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