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ühreParameter
Name der Schaltfläche = IDC_Subtraktion
Membervariable da Icon eingebunden = m_Minus
Symbol ID = IDI_Minuswer 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
-
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ügenm_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 einbindenBOOL 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. ]