CToolTipCtrl - Problem



  • Weder FAQ noch MSDN helfen mir nicht wirklich weiter - und die Suchefunktion funktioniert nicht.

    Ich würde gerne einmal wissen, wie das mit den Tooltips eigentlich richtig funktioniert.

    Angenommen, ich habe einen Dialog, in dem das Steuerelement (CButton)m_ctrlBtn vorhanden ist. Außerdem ist im Header

    CToolTipCtrl m_pToolTip;
    

    zu finden.

    Ich dachte es funktioniert so:

    bool MyDlg::OnInitDialog(...)
    {
     ...
     m_pToolTip.Create(this, TTS_ALWAYSTIP);
     m_pToolTip.AddTool(m_ctrlBtn, "Text");
     m_pToolTip.Activate(TRUE);
     ...
    }
    

    Trotzdem zeigt der Button keinen ToolTip an. Weiß jemand warum nicht?



  • Servus,

    du brauchst bei AddTool einen Zeiger auf CWnd. Jetzt gibs mehrere Möglichkeiten. Entweder du machst das so:

    m_pToolTip.AddTool(CWnd::FromHandle(m_ctrlBtn.m_hWnd), "Hallo Paul!!!");
    

    oder so:

    m_pToolTip.AddTool(GetDlgItem(ID_BUTTON),"Hallo Paul!!!");
    

    FromHandle und GetDlgItem liefern einen CWnd* zurück den du dafür benötigst.

    *winke*
    Hellsgore

    Ich vergaß
    EDIT:

    Wenn du einen Zeiger von CWnd hast und es geht immernoch nicht dann baue mal eine PreTranslateMessage ein:

    //##################### PreTranslateMessage #####################
    
    BOOL CDeinDlg::PreTranslateMessage(MSG* pMsg) 
    { 
        if(IsWindow(m_ttipctrl.m_hWnd))   
        {  
            m_ttipctrl.RelayEvent(pMsg);  
        }  
        return CDialog::PreTranslateMessage(pMsg); 
    }
    

    m_ttipctrl ist hier CToolTipCtrl.

    Dann gehts 😃



  • Huhu, guckuck !!

    Ich habe es mal ausprobiert...
    ... wenn ich eine überladene, virtuelle Funktion hinzufüge, dann
    klappt das mit dem Tool Tipp, wie Du es beschrieben hast.

    Die hier habe ich mit dem Klassen-Assistenten hinzugefügt:

    BOOL MyDlg::PreTranslateMessage(MSG* pMsg)
    {
    m_pToolTip.RelayEvent(pMsg);

    return CDialog::PreTranslateMessage(pMsg);
    }

    Dieser Aufruf im OnInitDialog() kannst Du auch weglassen:
    m_pToolTip.Activate(true);

    Und wenn Du mehrere Views in einem Rahmen hast, dann nimm:
    m_pToolTip.Create(AfxGetMainWnd());

    Gruß, Joe



  • Danke, es funktioniert wunderbar!


Anmelden zum Antworten