Newsgroup: it.comp.lang.c++
Titolo: WM_COMMAND e altro

Salve,
io avrei bisogno di sapere qual'è il messaggio da intercettare per sapere
quando l'utente scorre il mio menù. Con WM_COMMAND intercetto la selezione
ma come faccio a sapere quando passo sopra un menu contenente un submenu ?
Questo mi sarebbe utile perchè ad ogni menu dovrei associare una desc da
visualizzare in una status bar. L'utente si muove sui menu e visualizza la
desc.
E' possibile ??

 wrote in message
7o8lto$qp5$1...@nslave1.tin.it...

OK
Eccoti il logging di un menu
<00001> 00000524 S .WM_INITMENU hmenuInit:00000130
<00002> 00000524 R .WM_INITMENU
WM_INITMENU attiva il menu , e questo forse non ti interessa. 130 è l'handle
in hex del menu che ho utilizzato come esempio. R è la risposta.
<00003> 00000524 S .WM_MENUSELECT uItem:0 fuFlags:MF_POPUP | MF_HILITE |
MF_MOUSESELECT hmenu:00000130
<00004> 00000524 R .WM_MENUSELECT
Questo è già più interessante. E' la selezione della prima voce di menu .
Nel mio caso la voce "File" . uItem contiene 0 perchè è la prima voce di
menu nell'ordine .  MF_POPUP , MF_HILITE ed MF_MOUSESELECT sono dei
parametri di stile che vengono passati insieme al messaggio. I valori in hex
li puoi ottenero o con l'API viewer di Microsoft o su MSDN.
L'ultimo valore è come al solito l'handle del menu.
in questo caso wparam vale:
80900000 in hex  ( vedi MSDN o APIv e capirai perchè)
lparam:
00000130 in hex  (handle del menu)
MF_HILITE evidentemente indica che la voce di menu è attiva. MF_MOUSESELECT
che il menu è stato selezionato da mouse.
<00005> 00000524 S .WM_INITMENUPOPUP hmenuPopup:0000012C uPos:0
fSystemMenu:False
<00006> 00000524 R .WM_INITMENUPOPUP
Inizializzazione del popup.
<00007> 00000524 S ..WM_MENUSELECT uItem:2 fuFlags:MF_HILITE |
MF_MOUSESELECT hmenu:0000012C
<00008> 00000524 R ..WM_MENUSELECT
<00009> 00000524 S ..WM_MENUSELECT uItem:3 fuFlags:MF_GRAYED | MF_DISABLED |
MF_HILITE | MF_MOUSESELECT hmenu:0000012C
<00010> 00000524 R ..WM_MENUSELECT
<00011> 00000524 S ..WM_MENUSELECT uItem:4 fuFlags:MF_GRAYED | MF_DISABLED |
MF_HILITE | MF_MOUSESELECT hmenu:0000012C
<00012> 00000524 R ..WM_MENUSELECT
<00013> 00000524 S ..WM_MENUSELECT uItem:5 fuFlags:MF_HILITE |
MF_MOUSESELECT hmenu:0000012C
<00014> 00000524 R ..WM_MENUSELECT
<00015> 00000524 S ..WM_MENUSELECT uItem:4
fuFlags:MF_GRAYED | MF_DISABLED | MF_HILITE |
MF_MOUSESELECT hmenu:0000012C
<00016> 00000524 R ..WM_MENUSELECT
<00017> 00000524 S ..WM_MENUSELECT uItem:3 fuFlags:MF_GRAYED | MF_DISABLED |
MF_HILITE | MF_MOUSESELECT hmenu:0000012C
<00018> 00000524 R ..WM_MENUSELECT
<00019> 00000524 S ..WM_MENUSELECT uItem:2 fuFlags:MF_HILITE |
MF_MOUSESELECT hmenu:0000012C
<00020> 00000524 R ..WM_MENUSELECT
<00021> 00000524 S ..WM_MENUSELECT uItem:0 fuFlags:MF_POPUP | MF_HILITE |
MF_MOUSESELECT hmenu:00000130
<00022> 00000524 R ..WM_MENUSELECT
Questi sono i messaggi generati quando mi sono spostato nel menu. Non
capisco però perchè il menu non contiene l'uitem n° 1 .
Non è però importante. Nel menu mi sono spostato fino in fondo ( uItem 5 ) e
poi sono risalito fino alla voce "File". Come puoi notare , alcune voci di
menu sono disattivate ( MF_GRAYED, MF_DISABLED).
Disattiva il MENUPOPUP :
<00023> 00000524 S .WM_UNINITMENUPOPUP
<00024> 00000524 R .WM_UNINITMENUPOPUP
<00025> 00000524 S .WM_MENUSELECT uItem:0 fuFlags:FFFF (menu was closed)
hmenu:00000000
<00026> 00000524 R .WM_MENUSELECT
Spero di essere stato sufficentemente esauriente.
Ciao