Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Tooltip в ListCtrl. Что я не так делаю ? 
:(
    Опции темы
AndreySol
Дата 26.8.2004, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



У меня проблема с всплывающими подсказками для ListCtrl.
Есть два контрола - ListCtrl и TreeCtrl. Для них унаследованы классы CMyListCtrl от CListCtrl и CMyTreeCtrl от TreeCtrl, каждый привязан через переменную к этому окну. И есть такая реализация всплывающих подсказок (tooltip) в этих окнах, абсолютно одинаковая для обоих:
в MyListCtrl.h (MyTreeCtrl.h)объявлены функции и переменные:
Код

BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
int IndexItem; // ListCtrl
HTREEITEM IndexItem; // для TreeCtrl

в MyListCtrl.cpp (MyTreeCtrl.cpp):
карта сообщений
Код

BEGIN_MESSAGE_MAP(CMyListCtrl(CMyTreeCtrl), CListCtrl(MyTreeCtrl))
//{{AFX_MSG_MAP(CMyListCtrl(CMyTreeCtrl))
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) // это добавлено
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) // это добавлено
END_MESSAGE_MAP()

далее сама реализация вывода всплывающих подсказок:
Код

void CMyListCtrl(CMyTreeCtrl)::PreSubclassWindow()
{
EnableToolTips(TRUE); // поддержка tooltip

CListCtrl(CMyTreeCtrl)::PreSubclassWindow();
}

void CMyListCtrl(CMyTreeCtrl)::OnMouseMove(UINT nFlags, CPoint point)
{
// получаем номер итема под мышью
{// это для ListCtrl
 UINT uFlags;
 int Index;
 Index = HitTest(point, &uFlags);
 if((uFlags == LVHT_ONITEMLABEL) | (uFlags == LVHT_ONITEMICON))
 {
  IndexItem = Index;
 }
 else
 {
  IndexItem = -1;
 }
}

{// это для TreeCtrl
 UINT uFlags;
 HTREEITEM Index;
 Index = HitTest(point, &uFlags);
 if((uFlags == LVHT_ONITEMLABEL) | (uFlags == LVHT_ONITEMICON))
 {
  IndexItem = Index;
 }
 else
 {
  IndexItem = NULL;
 }
}

CListCtrl(CTreeCtrl)::OnMouseMove(nFlags, point);
}

BOOL CMyListCtrl(CMyTreeCtrl)::OnToolTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
// для ANSI и UNICODE версий
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;

UINT nID = pNMHDR->idFrom;

CString strTipText;
// получаем текст подсказки
strTipText = GetItemText(IndexItem, 0); // для ListCtrl
strTipText = GetItemText(IndexItem); // для TreeCtrl

// передаем в структуру ToolTip
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
 lstrcpyn(pTTTA->szText, strTipText, 80);
else
 _mbstowcsz(pTTTW->szText, strTipText, 80);
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
 _wcstombsz(pTTTA->szText, strTipText, 80);
else
 lstrcpyn(pTTTW->szText, strTipText, 80);
#endif

*pResult = 0;

return TRUE;    // message was handled
}

А теперь собственно проблема - для TreeCtrl все работает прекрасно, а вот для ListCtrl окно подсказки мигает так что даже текст трудно заметить.
Как с этим бороться ?
Заранее Всем спасибо за ответы и подсказки.
P.S. код я состряпал на основе статьи "Tooltip for individual cells" с www.codeguru.com.
Здесь сама статья.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0395 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.