Вопрос

Здравствуйте, comp.
Будьте добры! Подскажите такой вопрос. Когда В MFC включаеш разрешение
ввода инструментальных подсказок, можно ли в них вставить свой текст?
Если да, то каким образом.
← Июнь 2005 → | ||||||
22
|
26
|
|||||
---|---|---|---|---|---|---|
27
|
За последние 60 дней ни разу не выходила
Сайт листа:
http://codeguru.ru
Открыт:
21-09-2003
Пре-модерация: Нет
Адрес для писем в лист: comp.soft.prog.prog-list@subscribe.ru
Адрес
модератора: comp.soft.prog.prog-owner@subscribe.ru
Здравствуйте, comp.
Будьте добры! Подскажите такой вопрос. Когда В MFC включаеш разрешение
ввода инструментальных подсказок, можно ли в них вставить свой текст?
Если да, то каким образом.
Здравствуйте, Yury.
Всё разобрался, всё запусти. Работает. Но при попытке ввода подсказки
на русском языке выводит кракозяблики. Как это исправить?
Здравствуйте !
Наверно на вкладке "resources" раскрыть папку "string table",
кликнуть правой кнопкой на строчке "String Table [English (U.S)]",
в меню выбрать "properties", потом в диалоговом окне в списке
языков выбрать русский.
--
С уважением, Вахтуров Виктор.
Номер выпуска : 4676
Возраст листа : 636 (дней)
Количество подписчиков : 528
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/386884
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
Здравствуйте, Victor.
А почему когда в пректе была подключена "String Table" сгенерированная
мастером при построении проекта в "properties" набыло возможности
выбора языка? А когда я удалил "String Table" по умолчанию и подключил
новую "String Table", то возможность выбора языка появилась.
Здравствуйте !
Гм... странно. Не замечал такого.
Обычно язык таблицы строк сменить можно сразу после создания проекта.
Лучше это делать именно сразу, т.к. если вписать в таблицу что то
по русски, а потом сменить язык на русский, то все русские строки
станут нечитаемыми.
--
С уважением, Вахтуров Виктор.
Номер выпуска : 4681
Возраст листа : 637 (дней)
Количество подписчиков : 530
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/387221
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
Здравствуйте, Victor.
Ещё вопрос. У меня не получается включить инструментальную подсказку
над "Edit", "Check Box" и Radio Button". Над ними есть возможность
включить подсказку?
Здравствуйте !
Есть конечно.
Есть стандартный контрол Tool Tip в винде.
В MFC есть соответствующий класс CToolTipCtrl.
Так вот. Один способ "включить" подсказки в _любом_ окне - создать
окно тултипа, зарегистрировать "тулы" - задать области в которых будут
выводиться подсказки с помощью CToolTipCtrl::AddTool
(сообщение TTM_ADDTOOL), активизировать его, и ловить сообщения мыши
чтобы вызывать потом CToolTipCtrl::RelayEvent.
Как часто бывает, есть другой способ.
Фишка в том, что в MFC уже реализован механизм создания тултипа,
фильтрации и обработки сообщений мыши для работы с подсказками.
Указатель на экземпляр тултипа находится в структуре _AFX_THREAD_STATE -
в каждом потоке ядро MFC когда надо может создавать 1 экземпляр
этого контрола.
Для того, чтобы "включить" для некоторого окна _автоматическое_
отображение подсказок, надо вызвать для него CWnd::EnableToolTips, либо
CWnd::EnableTrackingToolTips.
Здесь я пишу "автоматическое"... на самом деле не все так просто.
В окне-рамке (понаследованном от CFrameWnd) все действительно будет
работать (если в таком окне создать дочерние контролы, а в таблице
строк будут строки с ID, равными ID этих контролов и эти строки
будут вида '\nПодсказка', то над дочерними контролами будут эти
подсказки выводиться). Если же попытаться что то подобное сделать
для другого окна - не прокатит.
Дело в том, что в CFrameWnd есть обработчик сообщения WM_NOTIFY
с кодами TTN_NEEDTEXTA и TTN_NEEDTEXTW. Этот обработчик как раз
и грузит строки из ресурсов и отдает их тултипу для отображения.
Так вот для решения Вашей задачи (отображения тултипов над дочерними
окнами в любом окне надо для этого окна вызвать EnableToolTips, а также
создать обработчик WM_NOTIFY с кодами TTN_NEEDTEXTA и TTN_NEEDTEXTW:
class CMyWindow : public CBaseClass
{
afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR,
LRESULT* pResult);
...
}
BEGIN_MESSAGE_MAP(CMyWindow, CBaseClass)
//{{AFX_MSG_MAP(CMyWindow)
...
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMyWindow::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
...
}
Код OnToolTipText можно, конечно, полностью передрать из
CFrameWnd::OnToolTipText (это можно делать в случае, если, например,
проект на диалоге построен), а можно просто делегировать вызов
в метод окна, понаследованного от CFrameWnd (если проект - MFC
SDI или MDI проект, то главное окно - как раз и является наследником
CFrameWnd).
То есть что то типа:
BOOL CMyWindow::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
class CDummyFrame : public CFrameWnd
{
friend class CMyWindow;
};
return ((CDummyFrame *) AfxGetMainWnd())->OnToolTipText(0,
pNMHDR, pResult);
}
Это только если класс главного окна является потомком CFrameWnd
Все, пожалуй :)
--
С уважением, Вахтуров Виктор.
Номер выпуска : 4703
Возраст листа : 647 (дней)
Количество подписчиков : 522
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/392611
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
Hello Виктор,
Monday, June 13, 2005, 2:03:56 PM, you wrote:
текст вводится в ресурс StringTable, причем идентификатор строки
используется тот же что и у кнопки тулбара. В строке пишется
фактически две строки - та что будет выводится на тултипе и та что
будет загружаться в панель статуса. Строки разделяются символом '\n'.
А если нужен динамический текст на подсказках, то создавай объект
CToolTipCtrl вручную. Еще есть метод GetToolTips() для CTreeCtrl,
CToolBarCtrl, CSliderCtrl, CReBarCtrl, CListCtrl.