Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как показать ToolTip на произвольном месте на экране

32K
29 августа 2008 года
Denis1986
27 / / 25.08.2008
Пользовательский интерфейс приложения построен на базе mfc.
Мне нужно сделать всплывающее окно для класса, наследованного от CStatic.
Я пользовался всплывающими окнами раньше. Но мне было не критично, где они будет показаны, поэтому меня вполне устраивал стандартный вариант, когда всплывающая подсказка появляется под курсором мыши.
Я делал это так:

Код:
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;
}

Сейчас мне необходимо указать определённые координаты, где должна выводиться всплывающая подсказка. Я нашёл такой вариант:
http://www.codeproject.com/KB/miscctrl/tooltipzen.aspx
но оказалось, что этот вариант работает только в старых версиях Windows/VS.
В MSDN сказано, что надо послать toolTipу сообщение TTM_TRACKPOSITION и указать в нём необходимые координаты. Но при том подходе, который я использовал раньше (см. код выше) у меня нет handle всплывающего окна.
Как сделать, чтобы всплывающее окно повлялось в месте с заданными координатами?
14
29 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Не полностью уверен, но:
1. NMHDR.hwndFrom ?
2. свой CToolTipCtrl ?
32K
02 сентября 2008 года
Denis1986
27 / / 25.08.2008
Прошу прощения, что так долго не отвелал.
Проблему удалось решить прописав в манифесте версию Visual Studio 6.0.0.0. Вроде, это больше ни на что не повлияло :). Понятно, что это хак, но пока нет времени искать более подходящее решение.
32K
02 сентября 2008 года
Denis1986
27 / / 25.08.2008
Phodopus
Спасибо за совет. Устанавливать NMHDR.hwndFrom я уже пробовал - это не помогло.
На счёт CToolTipCtrl - это я попробовал в самом начале и это тоже не помогло. Дело в том, что родительское окно моего контрола снаследовано не от CFrameWnd. Как я понял, в этом случае не получится использовать стандартный CToolTipCtrl.
14
02 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: Denis1986
PhodopusУстанавливать NMHDR.hwndFrom я уже пробовал - это не помогло



Дык не устанавливать его надо, а перемещать MoveWindow-ом. По идее это будет hwnd самого тултипа. Могу ошибаться

32K
10 сентября 2008 года
Denis1986
27 / / 25.08.2008
Phodopus
Большое спасибо! Это действительно помогло. Как говорится: всё гениальное - просто :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог