Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > CToolTipCtrl


Автор: eniac 21.9.2009, 18:33
Вечер добрый!
Мне нужно сделать так чтоб СToolTipCtrl работал только когда Ctrl нажат...

Автор: Andrey44 22.9.2009, 06:53
Цитата(MSDN)

Call this function to activate or deactivate a tool tip control.

 
void Activate( 
   BOOL bActivate  
);
 


И следи за нажатием на Ctrl

Автор: eniac 22.9.2009, 08:58
Цитата(Andrey44 @  22.9.2009,  06:53 Найти цитируемый пост)
his function to activate or deactivate

А в каком месте следить?

Я пытаюсь это сделать в OnToolHitTest в своем класе ToolTip (class ToolTip : public CToolTipCtrl), но програма никогда туда не заходит.

Автор: Andrey44 22.9.2009, 09:21
Я бы следил в диалоговом окне
Ловим WM_KEYDOWN if nChar==VK_CTRL Activate(true)
Ловим WM_KEYUP if nChar==VK_CTRL Activate(false)

Автор: eniac 22.9.2009, 09:35
Но у меня куча диалоговых окон и я б не хотел в каждом писать обработчик, както это не практично

Автор: Earnest 23.9.2009, 13:27
OnToolHitTest предназначена для обработки исключительно стандартного тултипа, создаваемого оболочкой MFC. А у тебя, как я поняла, свой класс? Кроме того, OnToolHitTest - это обрабочика владельца тултипа, а не самого тултипа. Поэтому и не заходит. 
Далее, если речь идет о прикручивании такого тултипа только к диалоговым окнам, то аргумент "у меня куча окон" не катит. Сделай базовый класс и наследуйся. Можно даже (и лучше) делать такой класс неоконным миксом (т.е. не наследником окна или диалога, и подмешивать его вторым при определении своих классов). Или сделать шаблон (чтобы гибко выбирать базовые классы). И тот и другой подход будут работать не только с диалогами, но и с любыми окнами. Код пишешь один раз, модификация окон, желающих использовать такой тултип, минимальна. Только не KWYDOWN ловить, а делать это в PreTranslateMessage (не все нажатия доходят до окна).
И есть другой вариант - повесить хук WH_GETMESSAGE на свой процесс, отслеживать контрол и активировать-деактивировать тултип. Только нужно этот тултип как-то добыть... не глобальную же переменную заводить... В общем, есть как плюсы, так и минусы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)