是否可以在 CMFCToolbar 的 CMFCToolBarComboBoxButton 上添加自定义工具提示?
我现在可以使用资源文件中定义的“默认”工具提示文本,但我找不到能够动态更改工具栏中组合框上的工具提示文本的方法。
资源 :
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
工具栏创建正常,显示良好;我用 OnToolbarReset 中的 CMFCToolBarComboBoxButtoncsCombo “替换”按钮( 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 类并覆盖我可以找到的 2 个虚拟方法,它们应该符合我的预期:
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 尝试了这个,我得到了相同的“不工作”结果)。
我是否缺少一些步骤才能做到这一点?
谢谢。
最大限度。