| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CToolTipCtrl |
| Автор: eniac 21.9.2009, 18:33 |
| Вечер добрый! Мне нужно сделать так чтоб СToolTipCtrl работал только когда Ctrl нажат... |
| Автор: Andrey44 22.9.2009, 06:53 | ||
И следи за нажатием на Ctrl |
| Автор: eniac 22.9.2009, 08:58 |
А в каком месте следить? Я пытаюсь это сделать в 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 на свой процесс, отслеживать контрол и активировать-деактивировать тултип. Только нужно этот тултип как-то добыть... не глобальную же переменную заводить... В общем, есть как плюсы, так и минусы. |