Dialog - Tooltip eines Button



  • Wie kann ich auf einfacher Weise bei einer MFC Dialogbasierende Anwendung erreichen das schon beim draufzeigen eines Button mit der Maus ein Hinweiß eingeblendt wird.
    Zum Beispiel möchte ich bei einem Button mit folgenen Parameter eine Anzeige erscheinen lassen.
    Diese Option ist schon zum Beispiel beim X Symbol oben rechts eingebettet. Es Erscheint die Meldung > Schließen < wenn ich es mit dem Cursor berühre

    Parameter

    Name der Schaltfläche = IDC_Subtraktion
    Membervariable da Icon eingebunden = m_Minus
    Symbol ID = IDI_Minus

    wer kann mir da einen Tip geben oder helfen wie ich das einbinde

    Danke Vossy

    P.S. An alle noch ein schönen Fasching



  • Hat den keiner eine Idee oder so

    images/smiles/icon_sad.gif Vossy images/smiles/icon_sad.gif



  • Ich würde ja gerne helfen,
    hab aber selber keine Ahnung images/smiles/icon_confused.gif ,
    SORRY!! images/smiles/icon_smile.gif



  • Aber so viel ich weiß (ist aber nicht viel images/smiles/icon_smile.gif ) geht das nur bei Links in HTML!



  • NetterHelfer:
    quark *g*

    @Vossy:
    schau dir mal die Klasse CToolTipCtrl an



  • Hallo Vossy,

    habe zwar nicht genau verstanden, wie Dein Button sein soll, aber allgemein sind Tooltips für Dialogcontrols keine schwere Sache

    sCHRITT 1.
    Member Variable zu Deinem Dialog hinzufügen:

    ...
       CToolTipCtrl m_ttipctrl;   
    //CToolTipCtrl ist die Klasse, die dir hilft
    ...
    

    Schritt 2:
    in Deinem Dialog am Besten in InitDialog( ) machst Du folgendes

    ...
       m_ttipctrl.Create(this);
    //ToolTipFenster erzeugen und ihm sagen welches Fenster der Chef ist
    
       m_ttipctrl.AddTool(GetDlgItem(IDC_MY_CONTROL),"ToolTipText");
    //gewünschtes Control zum Tooltip 
    //hinzufügen(können auch mehrere sein)
    
       m_ttipctrl.Activate(TRUE);
    //und aktivieren
    ...
    

    Schritt3:

    //etwas zum Verständnis, PreTranslateMessage ist 
    //eine virtuelle Funktion (von CWnd)
    //die beim Eintreffen von Nachrichten aufgerufen wird, bevor
    // die Nachricht weiter verarbeitet wird, 
    //z.B. dein MouseMove-Ereignis aufgerufen wird. 
    //Die überschreibst Du einfach.
    //RelayEvent ist die Standard Memberfunktion von 
    //CTooltipCtrl, die man für die Verarbeitung von 
    //Maus-Nachrichten aufrufen muss
    
    CMyDialog::PreTranslateMessage(MSG* pMsg) 
    { 
    BOOL CMyProgDlg::PreTranslateMessage(MSG *pMsg)
    {
       if(IsWindow(m_ttipctrl.m_hWnd)) //existiert ?
       {
          m_ttipctrl.RelayEvent(pMsg);
       }
    //das wars
            return CDialog::PreTranslateMessage(pMsg);
    //das muss sein, sonst kriegst Dein Dialog die Nachricht nicht
    }
    

    Viel Spass

    [ Dieser Beitrag wurde am 09.02.2002 um 22:00 Uhr von Manuele editiert. ]

    [ Dieser Beitrag wurde am 09.02.2002 um 22:06 Uhr von dEUs editiert. ]



  • @Manuele:
    Nächstes Mal CodeTags verwenden!

    Ich habs in die FAQ geschoben.



  • Hallo Manuele
    Danke für den Tip und es ist auch ganz genau das was ich gesucht habe.
    Es fuzt aber nicht. Bekomme zwar keine FM aber auch keine Anzeige.
    Ich schätze das ich den Fehler irgendwo im 3 Schritt habe.

    CMyDialog::PreTranslateMessage(MSG* pMsg)

    konnte diese Zeile nur mit Hand einfügen da ich sonst keine andere richtige Möglichkeit gefunden habe.

    War das so richtig?

    Vossy



  • Hallo,
    vielleicht liegt es an der Declaration. Am besten mit dem Klassenassistenten (Ctrl+W, Klasse wählen und bei Message: Pre TranslateMessage)einfügen. Weil der fügt die Funktion automatisch als virtual BOOL in den Abschnitt AFX_VIRTUAL(...)ein.

    Gruß m_fcAnfaenger



  • Also für alle die es interesiert es funktioniert hervorragend unter Win 2000 und Win XP. Sollte auch unter 98 gehen aber nicht getestet

    und so geht das richtig

    Member Variable zu Deinem Dialog hinzufügen:

    CToolTipCtrl m_ttipctrl;
    

    -----------------------------------------------------------------
    in Deinem Dialog OnInitDialog() einfügen

    m_ttipctrl.Create(this);
    m_ttipctrl.AddTool(GetDlgItem(IDC_Button1),"Das ist Button 1");
    m_ttipctrl.AddTool(GetDlgItem(IDCANCEL),"Hier wird das Programm beendet");
    
    //und weitere hinzufügen
    m_ttipctrl.Activate(TRUE);
    

    ----------------------------------------------------------------
    virtuelle Funktion PreTranslateMessage einbinden

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

    -------------------------------------------------------------------

    Diese Funktion erspart zum Teil die Hielfeerstellung da sie die Button ind Icons erklärt.

    Vossy

    Ich weiß ich sollte den C++ Code benutzen aber das will bei mir nicht so richtig

    EDIT:
    Bitte Code-Tags verwenden

    [ Dieser Beitrag wurde am 11.02.2002 um 12:23 Uhr von dEUs editiert. ]

    [ Dieser Beitrag wurde am 17.02.2003 um 16:03 Uhr von Unix-Tom editiert. ]


Anmelden zum Antworten