ToolTips werden auf manchen Rechnern nicht angezeigt



  • Hallo miteinander,

    ich habe da ein kleines Problem... Für mehrere Controls in einem Dialog habe ich über die übliche Methode ToolTips zugewiesen.

    In der MyDialog Klassendefinition in der Header Datei:

    afx_msg BOOL OnToolTip(UINT id, NMHDR* pTTTStruct, LRESULT* pResult);
    

    In der Message Map der cpp Datei:

    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &MyDialog::OnToolTip)
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &MyDialog::OnToolTip)
    

    In der OnInitDialog Funktion der MyDialog Klasse:

    EnableToolTips(TRUE);
    

    Und als eigentliche Funktion in der MyDialog Klasse:

    BOOL MyDialog::OnToolTip(UINT id, NMHDR* pNMHDR, LRESULT* pResult) 
    {
      TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*)pNMHDR;
      UINT nID = pNMHDR->idFrom;
      if(pTTT->uFlags & TTF_IDISHWND)	
      {
        nID = ::GetDlgCtrlID((HWND)nID);
        if(nID)	
        {
          pTTT->lpszText = MAKEINTRESOURCE(nID);
          pTTT->hinst = AfxGetResourceHandle();
          return(TRUE);
        }
      }
      return(FALSE); 
    };
    

    Die Tooltiptexte sind in der String Table eingepflegt und alles funktioniert auf meinem Rechner und auf ein Paar anderen auch. Allerdings erscheinen auf der Mehrzahl der Rechner keine ToolTips. Das gilt unabhängig vom Betriebssystem (zumindest haben wir mehrere XP SP3 Systeme die ToolTips anzeigen und eine ganze Reihe XP SP3 die nichts anzeigen).

    Auf allen Rechnern sind die ToolTips in der Registry aktiviert, daran liegt es also nicht.

    Im übrigen konnte ich feststellen das in den Fällen wo es nicht geht, die Systemnachricht TTN_NEEDTEXTA oder TTN_NEEDTEXTW nicht empfangen wird (TTN_NEEDTEXT auch nicht, wurde auch schon getestet).

    Hat jemand eine Idee?

    Danke,
    Alex



  • Hi Alex,
    beim Stichwort "Tooltip funktioniert auf anderen Rechnern nicht" fällt mir die unterschiedlichen Größen der Struktur TOOLINFO abhängig vom eingesetzten Betriebssystem und eingestellter Compiler-Option _WIN32_WINNT ein.

    Der folgende Code ist zwar Win32-API, läßt sich aber genausogut auf MFC übertragen:

    TOOLINFO toolinfo;
    
    #if ( _WIN32_WINNT >= 0x0501 )
          if ( betriebssystemversion >= NUI32_OS_ID_WIN_XP_HOME )
          {
            toolinfo.cbSize = sizeof( TOOLINFO );
            toolinfo.lpReserved = NULL;  //Gibts ab WinXP, muß NULL sein.
          }
          else
          {
            toolinfo.cbSize = sizeof( TOOLINFO ) - sizeof( void* );
                                         //Abzüglich Member "void *lpReserved", wurde mit WinXP
                                         //eingeführt. Win95b bis Win98SE unterstützen TOOLINFO
                                         //mit dieser Größe nicht, deshalb alte Größe verwenden.
                                         //Win95 und Win95a unterstützen ohne IE3.0 kein Tooltip!
          }
    #else
          toolinfo.cbSize = sizeof( TOOLINFO );
                                         //Die Größe ist für alle Plattformen Win95b bis heute (Vista bzw. Server 2008) kompatibel
    #endif
    

    Da Du aber geschrieben hast:

    hal-x schrieb:

    Das gilt unabhängig vom Betriebssystem (zumindest haben wir mehrere XP SP3 Systeme die ToolTips anzeigen und eine ganze Reihe XP SP3 die nichts anzeigen).

    dürfte mein Vorschlag dann höchstwahrscheinlich doch nicht die Lösung sein?
    Checke mal nach, ob die Membervariable cbSize immer den korrekten Wert hat.

    Martin

    [Nachtrag]
    Hab beim schnellen Zusammenkopieren nen Mist gewürfelt 😞
    Natürlich heißt die Strukturvariable "toolinfo" und nicht "statusbar"!


Anmelden zum Antworten