Newsgroup: it.comp.programmare.win32
Titolo: ToolTips

Devo aggiungere alla mia applicazione i tooltips, e volevo farlo nel modo
piu' semplice possibile. Purtroppo la documentazione MSDN a riguardo e'
molto confusionaria. C'e' qualcuno che puo' darmi qualche dritta per
inserirli senza complicarmi troppo la vita?
ciao
Jeremi

 wrote in message
8482mr$ooe$1...@nslave1.tin.it...

In che ambiente o piattaforma programmi?
Con MFC non e` difficile.  La tua finestra sulla quale vuoi mostrare
i tooltip eredita certo da CWnd, e quindi ha fra le sue funzioni membro:
    -- EnableTooltips, chiamala con argomento TRUE per iniziare a
        mostrare i tooltip (se non erediti da CFrameWnd, dovrai anche
        gestire tu la notifica TTN_NEEDTEXT)
    -- CancelTooltips, chiamala se e quando vuoi nascondere
        immediatamente eventuali tooltip che stiano mostrandosi
    -- OnToolHitTest, funzione virtuale di CWnd, fanne l'override, se
        vuoi, per mostrare i tooltip proprio come desideri
Con altri ambienti usati per le UI su Win32, come DHTML, e`
ancora piu` facile.
Con le nude API, forse un po' meno.
Se chiarisci esattamente quale framework stai usando, forse
possiamo essere piu` precisi.
Alex

         vuoi, per mostrare i tooltip proprio come desideri
Io vorrei aggiungere i tooltip ha degli oggetti che non ereditano da
CFrameWnd. Ho trovato un esempio su MSDN che utilizza queste funzioni,
quello che
non ho capito e' dove mettere le stringhe che voglio visualizzare.
Jeremi

 non ho capito e' dove mettere le stringhe che voglio visualizzare.
Le metti nel tuo oggetto-finestra, e gestisci il messaggio di notifica
TTN_NEEDTEXT, che il tooltip ti spedisce quando ha bisogno
di sapere quale testo mostrare, appunto.
Aggiungi alla message map del tuo oggetto-finestra:
    ON_NOTIFY_EX( TTN_NEEDTEXT, 0, pippofun )
e aggiungi alla tua classe la funzione membro:
    BOOL pippofun( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
che implementi ad esempio, se la tua classe e` CPluto, come:
BOOL CPluto::pippofun( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    pTTT->lpszText = "Ciao, io sono Pluto, e tu?";
    return TRUE;
}
Se devi (come qui) mostrare meno di 80 caratteri, puoi usare anche,
in alternativa, come riga centrale della pippofun:
    strcpy(pTTT->szText, "Ciao, io sono Pluto, e tu?");
invece di modificare il membro lpszText della struttura TOOLTIPTEXT.
Alex

 > non ho capito e' dove mettere le stringhe che voglio visualizzare.
Adesso riesco a visualizzare il ToolTip, mi rimane ancora un dubbio da
risolvere. Come posso scegliere il testo da visualizzare in base alla
posizione del mouse, un po' come avviene sulla barra dei menu'?   Ho provato
ad utilizzare la funzione GetFocus(), ma mi riestituisce sempre lo stesso
puntatore indipendentemente dall'oggetto che il mouse punta.
Grazie
Jeremi.

 puntatore indipendentemente dall'oggetto che il mouse punta.
L'API GetCursorPos ti permette di ottenere la posizione del cursore
(il puntatore che il mouse "si porta in giro":-) in termini di coordinate
di schermo.  Puoi mappare queste coordinate-schermo a coordinate
interne alla client area di una finestra con ScreenToClient (API,
o funzione membro di CWnd, a tua scelta).  Alternativamente,
WindowFromPoint e ChildWindowFromPoint ti permettono di
risalire, dal punto, alla finestra che lo contiene, con varie opzioni
possibili per controllare i dettagli dell'operazione.
Ci sono, naturalmente e come al solito, anche altre opzioni.
Alex


OK... ci sono riuscito con queste due funzioni. Certo che pensavo che le MFC
fornissero un metodo ben piu' facile per aggiungere dei banali tooltips.
Grazie di tutto
Jeremi