Sto tentando di disabilitare/disabilitare le voci di menu utilizzando il metodo CMenu::EnableMenuItem()
.Perché non riesco a disabilitare/disabilitare i menu? (MFC)
Ho una variabile pMenu
che fa riferimento al menu principale della finestra di dialogo. Posso ottenere il sottomenu usando pMenu->GetSubMenu(int)
e usando submenu->GetMenuStringA()
, verificare i nomi dei sottomenu/voci di menu che ottengo indietro. Tuttavia ho problemi con il metodo EnableMenuItem()
. Diciamo che c'è un menu File
. Al suo interno ci sono New
e Open
menu popup e Import
, Close
e Close All
voci di menu. Il New
e il Open
dispongono di voci di sottomenu. (Es New->Document
) Uso submenu->EnableMenuItem([position of submenu/menuitem], MF_BYPOSITION | MF_GRAYED);
posso disattivare New
o Open
, comunque la funzione fallisce per Import
, Close
e Close All
, così come tutte le voci di menu con New
e Open
.
Nota: quando dico che EnableMenuItem()
fallisce, non intendo che restituisca -1. Restituisce lo stato precedente, ma il menu non diventa disabilitato o disabilitato.
Nella documentazione MSDN per EnableMenuItem()
: http://msdn.microsoft.com/en-us/library/h62wh3y1.aspx afferma che questo funzionerà sia per le voci di menu popup che standard. Però sembra funzionare solo per i pop-up.
Capisco cosa stai dicendo, ma non è proprio quello che sto cercando di fare. Non sto cercando di abilitare/disabilitare gli elementi con l'applicazione. Sto chiamando tutti questi metodi all'interno di un'applicazione esterna. – Amre
In definitiva non sarai in grado di farlo! Dovresti invece inviare messaggi personalizzati all'applicazione MFC dicendogli che alcune voci di menu dovrebbero essere in grigio. Quindi, all'interno dell'applicazione MFC, sarà possibile utilizzare il gestore ON_UPDATE_COMMAND_UI per abilitarli/disabilitarli. Non riesco a immaginare un altro modo per un'applicazione MFC. –
C'è un modo per chiamare il gestore onnmand o Bn_clicked se conosco l'id del menu? Ho provato a utilizzare sendmessage e postmessage passando l'handle della finestra principale e BN_CLICKED e WM_COMMAND ma non sembra funzionare. – Amre