Domanda Tray icon e rotella del mouse

zouth

Utente Silver
16 Dicembre 2020
82
36
4
61
Ciao a tutti,
Sto cercando un modo, in Qt o con le Win32 API, per far eseguire due funzioni diverse quando con il cursore sopra una tray icon la rotella del mouse viene girata avanti o indietro.

(Sto provando a creare un programma che alza e abbassa il volume con la rotella del mouse come e' possibile fare su Linux).

Grazie in anticipo.
 
La tray icon di Windows ha un set limitato di messaggi che invia alla tua finestra quando si verifica un evento sull'oggetto tray. Tra i messaggi ci sono quelli di click destro e sinistro del mouse, pressione di spazio o enter e di eventi di apertura/chiusura dei notify balloon. Niente che riguardi la rotella del mouse. La cosa che ci va più vicino è quello che c'è già: un click sinistro sull'icona del volume che fa apparire la finestra con lo slider e poi usare la rotella del mouse per il volume.
Se ti serve programmarne uno simile ti tocca seguire lo stesso approccio, al messaggio WM_LBUTTONUP crei una nuova finestra calcolando le coordinate per farla apparire sopra la tray, disegni i componenti, setti il focus e a quel punto puoi ricevere sulla finestra i messaggi di tipo WM_MOUSEWHEEL.

Se volessi proprio fare la porcata ed andare contro il design bacato di Windows potresti usare SetWindowsHookExW con WH_MOUSE_LL (riceve eventi del mouse globalmente), calcolare posizione e area del rettangolo dell'icona e vedere se l'evento riguarda la mouse wheel ed è nel punto giusto ma te lo sconsiglio vivamente, possono succedere tante brutte cose in alcuni casi (icona nel menu overflow, fallimento nel chiamare CallNextHookEx che bloccherebbe il mouse, difficoltà nel debugging, calcoli erronei con scaling differente, bug con multimonitor, altri programmi in fullscreen ...).
 
  • Mi piace
Reazioni: nfvblog