Можно ли добавить пользовательскую всплывающую подсказку в CMFCToolBarComboBoxButton в CMFCToolbar?
Теперь я могу использовать текст всплывающей подсказки «по умолчанию», как определено в файле ресурсов, но я не могу найти способ динамически изменять текст всплывающей подсказки в поле со списком на панели инструментов.
Ресурсы :
IDR_TOOLBAR1 TOOLBAR 16, 15
BEGIN
BUTTON ID_BUTTON32771
BUTTON ID_BUTTON32772
BUTTON ID_BUTTON32773
END
STRINGTABLE
BEGIN
ID_BUTTON32771 "Button 1\nButton 1"
ID_BUTTON32772 "Button 2\nButton 2"
ID_BUTTON32773 "Button 3\nButton 3"
END
Панель инструментов создается нормально и хорошо отображается; Я «заменяю» кнопку на CMFCToolBarComboBoxButtoncsCombo в OnToolbarReset (обработчик AFX_WM_RESETTOOLBAR )
LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM)
{
UINT uiToolBarId = (UINT) wp;
if (uiToolBarId == IDR_TOOLBAR1 )
{
CMFCToolBarComboBoxButtoncsCombo(ID_BUTTON32772, GetCmdMgr()->GetCmdImage(ID_BUTTON32772, FALSE), CBS_DROPDOWNLIST);
m_MyToolbar.ReplaceButton(ID_BUTTON32772, csCombo);
m_MyToolbar.AddItem( _T("un") );
m_MyToolbar.AddItem( _T("deux") );
m_MyToolbar.AddItem( _T("trois") );
}
return 0;
}
Это работает нормально, кнопка заменяется полем со списком, и отображается текст всплывающей подсказки по умолчанию.
Теперь я хочу иметь возможность динамически изменять текст всплывающей подсказки.
Я пытался обработать TTN_NEEDTEXT (а также TTN_NEEDTEXTA и TTN_NEEDTEXTW) в основном фрейме (и даже в моем производном классе панели инструментов), но он не вызывается для панелей инструментов.
Я попытался создать свой собственный класс CMFCToolBarComboBoxButton и переопределить два виртуальных метода, которые я смог найти, которые должны делать то, что я ожидал:
class MyComboBox : public CMFCToolBarComboBoxButton
{
public:
MyComboBox ();
MyComboBox (UINT uiID, int iImage, DWORD dwStyle = CBS_DROPDOWNLIST, int iWidth = 0);
virtual BOOL OnGetCustomToolTipText(CString& );
virtual BOOL OnUpdateToolTip(CWnd* , int , CToolTipCtrl& , CString& );
virtual ~MyComboBox ();
DECLARE_SERIAL(MyComboBox )
};
а также
IMPLEMENT_SERIAL(MyComboBox , CMFCToolBarComboBoxButton,0)
MyComboBox ::MyComboBox (UINT uiID, int iImage, DWORD dwStyle , int iWidth ) : CMFCToolBarComboBoxButton(uiID, iImage,dwStyle, iWidth )
{
}
MyComboBox ::MyComboBox ()
{
}
MyComboBox ::~MyComboBox ()
{
}
BOOL MyComboBox ::OnGetCustomToolTipText(CString& strToolTip)
{
strToolTip = "bonjour";
return TRUE;
}
BOOL MyComboBox ::OnUpdateToolTip(CWnd* /*pWndParent*/, int /*iButtonIndex*/, CToolTipCtrl& /*wndToolTip*/, CString& str)
{
str = "allo";
return TRUE;
}
2 виртуальных метода никогда не вызываются; ну вызываются они при открытии приложения и при закрытии приложения; но никогда, когда приложение работает нормально, когда пользователь перемещает/наводит указатель мыши на верхнюю часть поля со списком на панели инструментов.
Я попытался заглянуть в диспетчер всплывающих подсказок (CTooltipManager) и включить или отключить диспетчер всплывающих подсказок, вызвав или нет InitTooltipManager.
(Я быстро попробовал это с VS2012 и получил те же «нерабочие» результаты).
Есть ли какие-то шаги, которые мне не хватает, чтобы сделать это?
Спасибо.
Максимум.