PDA

View Full Version : [C, Win32] Menu di popup dell'icona nella tray


71104
26-09-2007, 18:31
questo è uno dei misteri della vita che ancora non sono riuscito a risolvere.
allora: io installo un'icona nella tray con Shell_NotifyIcon e (tramite il messaggio registrato per quell'icona) ricevo notifiche come ad esempio WM_RBUTTONUP. poi facciamo che carico un menu dalle risorse dell'eseguibile (LoadMenu) e che voglio aprirlo in corrispondenza del cursore del mouse quando l'utente clicca sull'icona, cioè appunto quando ricevo WM_RBUTTONUP: dunque richiamo la GetSubMenu (visto che non si sa per quale motivo la TrackPopupMenuEx non mi funge correttamente se gli passo direttamente l'handle del menu, cioè quello resituito dalla LoadMenu) e chiamo la TrackPopupMenuEx: gli faccio aprire il menu alle coordinate che ottengo con GetCursorPos e funziona tutto tranne il fatto che quando clicco al di fuori del menu, cioè su una finestra retrostante, il c@##* di menu non si chiude. perché TUTTI i programmi del mondo riescono a farlo chiudere e io no? :cry: :cry:

andbin, questa è praticamente per te, sei l'unico che ci capisca di programmazione Win32 qui dentro :D
a meno che in questi ultimi giorni non sia giunto qualcun altro :p

andbin
26-09-2007, 20:53
andbin, questa è praticamente per te, sei l'unico che ci capisca di programmazione Win32 qui dentro :D
a meno che in questi ultimi giorni non sia giunto qualcun altro :pEccomi. :)
Guarda ... le icone nella status area della taskbar le ho usate raramente (molto raramente). Ma mi ricordo che in effetti qualche problemino c'era. Però sono problemi ormai conosciuti.

Al riguardo leggi <questo> (http://support.microsoft.com/kb/135788/en-us) articolo della MS (l'ho trovato appena adesso).

A dire il vero mi ricordo che avevo letto da qualche parte (e poi mi sembra che avessi fatto proprio così) che si doveva fare una cosa del tipo:

SetForegroundWindow (hWnd);
TrackPopupMenu (........);
SetForegroundWindow (hWnd);

71104
26-09-2007, 21:56
omg, che vedo: workaround orribili!! schifezze simili in Win32 le ho viste veramente molto di rado... :|
dice che dovrei fare SetForegroundWindow su una mia dialog box prima di aprire il menu, ma il problema è che la maggior parte delle volte che nel mio programma l'utente clicca sull'icona io non ho nessuna finestra aperta. come si suppone che io debba fare? :wtf:
sono sicuro che ci sia una soluzione: per esempio il Gmail Notifier riesce a chiudere il menu anche senza sti magheggi... :confused:

71104
26-09-2007, 21:57
ma la finestra su cui devo chiamare SetForegroundWindow deve essere visibile o può essere anche nascosta al momento? perché io in effetti una dialog box ce l'ho ma è appunto invisibile... per l'esattezza si tratta di una modeless dialog box.

71104
26-09-2007, 21:59
aè: funziona!!! :D
ho usato la finestra invisibile :D

boh, che dire... grazie per il link, certo però che ste schifezze da parte di Microsoft... :O

trallallero
27-09-2007, 12:54
certo però che ste schifezze da parte di Microsoft... :O
http://www.freesmileys.org/emo/signs038.gif

:asd: