Я хочу создать всплывающую подсказку для вкладки на CTabView
, которая находится на одной из CSplitterWnd
панелей. В этом случае вкладка является CHtmlView
. Я положил CToolTipCtrl m_ToolTip
в CMainFrame
как public
. Я создаю его на OnCreate()
, затем пытаюсь добавить к нему тестовый текст на OnInitialUpdate()
элемента CHtmlView
. Но при наведении курсора на вкладку или клиентскую область вкладки подсказка не отображается. Что я делаю неправильно или отсутствует?
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// ...
m_ToolTip.Create(this);
return 0;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// create spliter windows - one of which will end up with CTabView
}
// One of the tabs in the CTabView is based on CHtmlView
void CMyHtmlView::OnInitialUpdate()
{
__super::OnInitialUpdate();
CToolTipCtrl &tooltip=((CMainFrame*) AfxGetMainWnd())->m_ToolTip;
tooltip.AddTool(this, _T("Test Tooltip"));
tooltip.Activate(TRUE);
}
Отказавшись от вышесказанного, я реализовал предложение на стр. 941-942 в книге Программирование Windows с помощью MF C Второе издание наследовать от CToolTipCtrl
и реализовывать новые функции, использующие TTF_SUBCLASS
. Я попробовал это в CMyTabView
на клиентской области вкладок. Это работает с правками и расширенными представлениями, но не с представлением HTML. В смысле, я имею в виду, это работает, может быть, дважды, а затем снова не подходит. Вот эта часть:
int CMyTabView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTabView::OnCreate(lpCreateStruct) == -1)
return -1;
AddView(RUNTIME_CLASS(CMyEditView), _T("Tab1"));
AddView(RUNTIME_CLASS(CMyRichView), _T("Tab2"));
AddView(RUNTIME_CLASS(CMyHtmlView), _T("Tab3"));
m_ToolTip.Create(this, TTS_ALWAYSTIP);
CMFCTabCtrl &tabctrl=GetTabControl();
for (int i=0; i < tabctrl.GetTabsNum(); ++i) {
m_ToolTip.AddWindowTool(tabctrl.GetTabWnd(i), _T("Test Tool Tip"));
}
return 0;
}
Не работал на HTML Представление было хорошо, потому что я действительно просто хочу его на вкладке. Поэтому я изменил его и избавился от всего вышеперечисленного (кроме .Create
) и добавил:
void CMyTabView::OnInitialUpdate()
{
CTabView::OnInitialUpdate();
CMFCTabCtrl &tabctrl=GetTabControl();
CRect rc;
tabctrl.GetTabsRect(rc);
if (!rc.IsRectEmpty()) {
m_ToolTip.AddRectTool(&tabctrl, _T("test tip"), &rc, (UINT_PTR) tabctrl.GetSafeHwnd());
}
}
Но это не работает. Он также пытался использовать this
, но все равно не работал. Так что, пока что-то работает, все еще не получается заставить работать на вкладках? Есть идеи?