2012-12-04 57 views
1

是否可以在CMFCToolbar中的CMFCToolBarComboBoxButton上添加自定義工具提示?是否可以在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嘗試這樣做,我得到同樣的「不工作」的結果)。

在那裏有一些步驟,我缺少能夠做到這一點?

謝謝。

最大。

+0

的方式我也面臨着如何動態變化** ** CMFCToolBarButton提示同樣的問題。 現在還沒有解決。如果你不使用** CMFCToolBar **和** ** CMFCToolBarButton,我認爲這是一個解決方案:http://www.codeguru.com/cpp/controls/controls/tooltipcontrols/article.php/c2171/Change -tooltips-AT-runtime.htm](http://www.codeguru.com/cpp/controls/controls/tooltipcontrols/article.php/c2171/Change-tooltips-at-runtime.htm) – alexzhang

回答

0

如果我理解你的問題,我相信你可以從CMFCToolBar派生並重寫

virtual BOOL OnUserToolTip(CMFCToolBarButton* pButton, CString& strTTText) const 

來控制需求的工具提示。

0
virtual BOOL GetToolbarButtonToolTipText(CMFCToolBarButton*/*pButton*/, CString&/*strTTText*/); 
virtual void GetMessageString(UINT nID, CString& rMessage) const; 

是這樣做對CMFCToolBar和CMFCToolBarButton

相關問題