BEGIN_MESSAGE_MAP(CFolderStatic, CStatic)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &CFolderStatic::OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &CFolderStatic::OnToolTipNotify)
END_MESSAGE_MAP()
int CFolderStatic::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
pTI -> hwnd = this -> GetSafeHwnd();
pTI -> uFlags = 0;
pTI -> lpszText = LPSTR_TEXTCALLBACK;
CRect l_rect;
this -> GetClientRect(&l_rect);
pTI -> rect = l_rect;
pTI -> uId = 0;
return this ->GetDlgCtrlID();
}
BOOL CFolderStatic::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
TOOLTIPTEXT* l_tip_text = (TOOLTIPTEXT*)pNMHDR;
l_tip_text -> lpszText = m_my_folder -> GetFullNameCStyle();
return 0;
}
Как показать ToolTip на произвольном месте на экране
Мне нужно сделать всплывающее окно для класса, наследованного от CStatic.
Я пользовался всплывающими окнами раньше. Но мне было не критично, где они будет показаны, поэтому меня вполне устраивал стандартный вариант, когда всплывающая подсказка появляется под курсором мыши.
Я делал это так:
Код:
Сейчас мне необходимо указать определённые координаты, где должна выводиться всплывающая подсказка. Я нашёл такой вариант:
http://www.codeproject.com/KB/miscctrl/tooltipzen.aspx
но оказалось, что этот вариант работает только в старых версиях Windows/VS.
В MSDN сказано, что надо послать toolTipу сообщение TTM_TRACKPOSITION и указать в нём необходимые координаты. Но при том подходе, который я использовал раньше (см. код выше) у меня нет handle всплывающего окна.
Как сделать, чтобы всплывающее окно повлялось в месте с заданными координатами?
1. NMHDR.hwndFrom ?
2. свой CToolTipCtrl ?
Проблему удалось решить прописав в манифесте версию Visual Studio 6.0.0.0. Вроде, это больше ни на что не повлияло :). Понятно, что это хак, но пока нет времени искать более подходящее решение.
Спасибо за совет. Устанавливать NMHDR.hwndFrom я уже пробовал - это не помогло.
На счёт CToolTipCtrl - это я попробовал в самом начале и это тоже не помогло. Дело в том, что родительское окно моего контрола снаследовано не от CFrameWnd. Как я понял, в этом случае не получится использовать стандартный CToolTipCtrl.
Цитата: Denis1986
PhodopusУстанавливать NMHDR.hwndFrom я уже пробовал - это не помогло
Дык не устанавливать его надо, а перемещать MoveWindow-ом. По идее это будет hwnd самого тултипа. Могу ошибаться
Большое спасибо! Это действительно помогло. Как говорится: всё гениальное - просто :)