Tooltips des Menüs abschalten



  • Hallo,

    Ich habe in meiner CMainFrame eine Menubar mit Menü angelegt. Das Menü selber ist in den Ressourcen definiert. Leider werden die IDs für die "oberen" Menüpunkte, wie "Datei" von der MFC selbst vergeben. Auch die IDs für die zuletzt geöffneten Dateien. Dabei werden wohl die IDs von 1 an vergeben. Leider sind in meinem Programm (ich habs halt so übernommen) die IDs von 1 an schon vergeben und haben auch String-Ressourcen. Dadurch erhalte ich sinnlose/falsche ToolTips über diesen Menüpunkten. Das Ändern der IDs ist leider nicht so einfach möglich. Jetzt sollte ich gern die ToolTips fürs Menü abschalten. Aber irgendwie will das nicht. Das Menubar hat kein CBRS_TOOLTIPS und ich habe auch nochmal explizit m_wndMenuBar.EnableToolTips(FALSE) gemacht - leider ohne Erfolg, die ToolTips gehen nicht weg.

    Wie kann ich die ToolTips abstellen?


  • Mod

    1. IDs inMenüs werden niemals von 1 an druchgezählt.
    2. IDs in Menüs beginnen normalerweise immer ab 0x8000 -> 0xDFFF
    http://msdn.microsoft.com/en-us/library/t2zechd4(v=vs.71).aspx
    3. Entsprechend liegen die verwendten IDs der MFC ab 0xE000 und weiter

    Wenn also hier Mist gebaut wurde, solltest Du aufräumen.
    Werde Dir erstmal klar was für IDs verwendet werden.

    Das Abcalten der Toolstips würde Dirnicht helfen, denn ansonsten hast Du ganz andere üble Effekte, die durchs Comand-Routng ausgelöst werden könnten gerade weil IDs doppelt belegt sind.

    PS: Selbst wnen das Projekt geerbt ist, kann man aufräumen.
    Einfach die IDs in der resource.h korrigieren, alles neu kompilieren und gut ists.



  • Hallo,

    Es geht um IDs, die von der MFC beim compilieren oder zur Laufzeit dynamisch vergeben werden. Die oberen Menüeinträge (Datei, Bearbeiten, ..., Hilfe) bekommen scheinbar die IDs 1, 2 usw. zugewiesen - selbst kann man in der Ressourcen-Datei keine IDs für die oberen Menüpunkte zuweisen. Ich habe auf den IDs von 0 bis 255 aber andere Dinge liegen und leider ist es nicht damit getan, mal nur ein der Resource.h was zu ändern. Die IDs kommen von nem externen System und werden im Programm, das leider sehr umfangreich ist, weiter verarbeitet. Und ein Gesamttest des Programms ist zeitlich einfach nicht drin. Deshalb die Idee, die Tooltips abzuschalten.

    Ich habe z.B. eine Ressource mit ID 1 und der ist ein String zugewiesen: "Beschreibung\nName". Nun wird, wenn ich mit dem Cursor über Datei bin das "Name" als Tooltip angezeigt. Für mich sieht das schon so aus, als ob da die ID 1 dem Menüpunkt Datei zugewiesen wird.



  • Hallo,

    Gibt es eine Möglichkeit die Tooltips vom Menü abzuschalten?



  • Sieh mal zu, dass Du keine doppelten IDs hast.

    Und dann diese Werte

    #define _APS_NEXT_RESOURCE_VALUE   1111
    #define _APS_NEXT_COMMAND_VALUE         32222
    #define _APS_NEXT_CONTROL_VALUE         7000
    

    entsprechend anpassen.

    Im Programm verwendest du doch nicht den int-Wert sondern die ID? Dann zumindest die fragwürdigen anpassen.



  • Moin,

    Nochmal: Ich selbst hab keine doppelten IDs. Nur ich hab die IDs 1, 2, 3 usw. und die muss ich auch benutzen. Es wäre ein Heidenaufwand, das zu ändern. Leider benutzt die MFC scheinbar die IDs ab 1.

    Deshalb meine ganz einfache Frage:

    Ist es möglich, die ToolTips abzuschalten? Wenn ja, wie?


  • Mod

    1. Tooltips werden durch einen Stil für den Toolbar enabled.
    2. Die MFC verwendet keine Tooltips ab 1. Das hast Du veanlasst.
    3. Wen Du die IDs in der resource.h änderst hat dies nur zur Folge dass Du neu kompilieren musst.
    Sonst nichts. Wo ist da bitte Aufwand? Es gibt sogar einen Resource-Renumberer auf CodeProject.com
    4. Ich würde auf die Suche gehen warum welche ID zu welchem Tooltip führt. Dazu kann man einfach Breakpoints im MFC Toolbar Code setzen.



  • Hallo,

    Martin Richter schrieb:

    1. Tooltips werden durch einen Stil für den Toolbar enabled.

    Naja, da hab ich die ToolTips aber disabled.

    Martin Richter schrieb:

    2. Die MFC verwendet keine Tooltips ab 1. Das hast Du veanlasst.

    Naja, ich hab auf Resource-ID 1, 2 usw. Strings liegen, die "zweizeilig" sind - seit ich die "zweizeilig" gemacht habe, um in den Toolbars ToolTips zu haben, bekomme ich genau diese ToolTips jetzt leider im Menü für "Datei", "Ansicht" usw. angezeigt. Also aus irgend einem Grund zeigt die MFC den ToolTip von Resource-ID 1 für das Menü "Datei" an, obwohl ich dem "Datei" nie die ID 1 gegeben habe (kann ich ja gar nicht) und obwohl die ToolTips aus sind.

    Martin Richter schrieb:

    3. Wen Du die IDs in der resource.h änderst hat dies nur zur Folge dass Du neu kompilieren musst.
    Sonst nichts. Wo ist da bitte Aufwand? Es gibt sogar einen Resource-Renumberer auf CodeProject.com

    Ich hatte ja schonmal geschrieben, so leicht isses leider nicht. Die IDs kommen von nem externen Gerät und aus Dateien und sonst wo her und hin. Ich müßte an allen Schnittstellen die IDs umrechnen.

    Martin Richter schrieb:

    4. Ich würde auf die Suche gehen warum welche ID zu welchem Tooltip führt. Dazu kann man einfach Breakpoints im MFC Toolbar Code setzen.

    Naja, um rauszufinden, wo ich schauen sollte, hab ich mal Spy++ versucht. Das zeigt mir auf das Menü in dem Moment, wenn der ToolTip kommt, nichtmal Messages.


  • Mod

    Spy++ hilft Dir da gar nichts.

    Schau Dir mal den Code in CFrameWnd::OnToolTipText an.
    Dieser ist verantwortlich für das laden.

    Kann es sein, dass eine falsche Ressource ID durch eine DLL geladen ist?
    Das dadurch AfxLoadString den falschen Text lädt.

    Dann wäre evtl. eine DLL der Verursacher.



  • Ich hab jetzt übrigens doch die IDs geändert, kämpfe aber noch mit den Nachwirkungen - ich hoffe, ich finde alle Stelle, wo die verwendet werden (die kommen wie gesagt von extern und werden für verschiedenes benutzt und jetzt muss ich an manchen Stellen den neuen Offset drauf addieren und an manchen nicht - deshalb wollte ich das vermeiden). Achja und ich bin gespannt, wie das mit der Lokalisierung wird - die englischen Texte darf ich bestimmt alle per Copy&Paste neu zuweisen 😞

    Naja, aber immerhin ist Land in Sicht.


Anmelden zum Antworten