Сообщений 0 Оценка 10 Оценить |
Для этой цели предусмотрены специальные сообщения TTM_SETTIPTEXTCOLOR и TTM_SETTIPBKCOLOR. После того как тултип создан, их можно отправлять с использованием функции SendMessage. При этом в wParam записывается новое значение цвета, а содержимое lParam игнорируется. Рассмотрим пример, в котором для тултипа задаётся красный текст на чёрном фоне.
SendMessage(hTip, TTM_SETTIPTEXTCOLOR, (WPARAM)RGB(255,0,0), 0); SendMessage(hTip, TTM_SETTIPBKCOLOR, (WPARAM)RGB(0,0,0), 0); |
В MFC для той же цели используются функции CToolTipCtrl::SetTipTextColor и CToolTipCtrl::SetTipBkColor, принимающие единственный параметр - новое значение цвета. Например:
// m_tt - объект класса CToolTipCtrl m_tt.SetTipTextColor(RGB(255,0,0)); m_tt.SetTipBkColor(RGB(0,0,0)); |
Проблемы возникают только в том случае, когда вы используете встроенную поддержку тултипов класса CWnd. В этом случае тултип создаётся и уничтожается в недрах MFC, причём документированного способа добраться до него не существует. Выйти из положения можно, воспользовавшись недокументированным: MFC сохраняет указатель на созданный ею объект класса CToolTipCtrl в структуре _AFX_THREAD_STATE, и можно получить к нему доступ, используя выражение AfxGetThreadState()->m_pToolTip.
Вторая проблема состоит в том, что MFC сама следит за временем жизни тултипа, и мы не можем точно знать, когда он уничтожается и создаётся заново. Поэтому нужные нам параметры отображения необходимо задавать всякий раз, когда тултип "собирается" появиться на экране. Удобнее всего делать это в ответ на уведомление TTN_NEEDTEXT, например:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFFFFFF, OnToolTipText) END_MESSAGE_MAP() BOOL CMainFrame::OnToolTipText(...) { CToolTipCtrl* ptt = AfxGetThreadState()->m_pToolTip; ptt->SetTipTextColor(RGB(255,0,0)); ptt->SetTipBkColor(RGB(0,0,0)); return CFrameWnd::OnToolTipText(...); } |
Как вы могли заметить, данный способ не блещет элегантностью. Вот почему в случае, когда вам требуется гибкость в управлении тултипом, рекомендуется использовать класс CToolTipCtrl.
В заключение отмечу, что кроме уже рассмотренных сообщений тултип распознаёт сообщения TTM_GETTIPTEXTCOLOR и TTM_GETTIPBKCOLOR, позволяющие определить текущие значения цветов. В MFC для той же цели существуют функции GetTipTextColor и GetTipBkColor класса CToolTipCtrl.
Сообщений 0 Оценка 10 Оценить |