The problem is that WM_UPDATEUISTATE changes the user interface (UI) state for the specified window and all its child windows - but it seems that the menu doesn't act as a child window and is not updated.

Programatically sending an 'ALT' keystroke to the window only seems to partially work - ie the menu is displayed with accelerators visible but it's not persistant and they are hidden again after the first mouse click. (Though hot keys on buttons etc do stay visible!)
The apps that you have observed which do always display their menu accelerators may be using ownerdrawn menus?
Possibly there is a yet to be discovered message equivalent to WM_UPDATEUISTATE that informs the menu what the current UI state for the window is?
(Sadly redrawing the menu bar with MENU DRAW BAR CbHndl doesn't do it!)
Leave a comment: