RB>popup-окну может и положено, а вот tooltip-у — нет.
Это tracking tooltip. Висит, пока не скажу ему обратное.
http://msdn.microsoft.com/en-us/library/bb760252(v=vs.85).aspx#tooltip_sample_tracking
Создаю его так:
...
// Окно подсказки
CWnd m_ttWin;
// Указатель на элемент-родитель
CWnd* m_pParent;
// Структура парметров подсказки
TOOLINFO m_toolItem;
...
m_ttWin.CreateEx( WS_EX_TRANSPARENT, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
m_pParent->GetParent()->GetSafeHwnd(), NULL);
...
// Заполняем структуру с параметрами подсказки
memset(&m_toolItem, 0, sizeof(m_toolItem));
m_toolItem.cbSize = sizeof(TOOLINFO);
m_toolItem.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
m_toolItem.hwnd = m_pParent->GetSafeHwnd();
m_toolItem.hinst = AfxGetInstanceHandle();
m_toolItem.lpszText = L"I' m a tooltip!";
m_toolItem.uId = (UINT_PTR)m_pParent->GetSafeHwnd();
m_pParent->GetClientRect (&m_toolItem.rect);
// Регистрируем нашу подсказку
m_ttWin.SendMessage(TTM_ADDTOOL, 0, (LPARAM) &m_toolItem);
// Устанавливаем начальные координаты показа
m_pParent->GetWindowRect (&m_toolItem.rect);
m_ttWin.SendMessage(TTM_TRACKPOSITION,
0, (LPARAM)MAKELONG(m_toolItem.rect.left + 5, m_toolItem.rect.bottom + 5));
...
Показываю так:
...
// Устанавливаем координаты показа
m_pParent->GetWindowRect (&m_toolItem.rect);
m_ttWin.SendMessage(TTM_TRACKPOSITION,
0, (LPARAM)MAKELONG(m_toolItem.rect.left + 5, m_toolItem.rect.bottom));
// Активируем новую подсказку
m_ttWin.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_toolItem);
...
Прячу так:
...
m_ttWin.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_toolItem);
...
MFC я знаю довольно-таки паршиво, поэтому готов выслушать любые комментарии.