How do I create a conditional cascade menu?

The following works for me to set a submenu as a conditional-cascade menu, then set it's default id (hwndMenu is the hwnd of the top-level menu):

   MENUITEM mi;

   WinSendMsg( hwndMenu, MM_QUERYITEM,
               MPFROM2SHORT( idSubMenu, TRUE ), &mi );

   // Set the MS_CONDITIONALCASCADE bit for the submenu.

   WinSetWindowBits( mi.hwndSubMenu, QWL_STYLE, MS_CONDITIONALCASCADE,
                     MS_CONDITIONALCASCADE );

   // Set cascade menu default

   WinSendMsg( mi.hwndSubMenu, MM_SETDEFAULTITEMID,
               MPFROMSHORT( idDefaultItem ), NULL );

Then I do this to query the default item:

 MENUITEM mi;

 WinSendMsg( hwndMenu, MM_QUERYITEM, MPFROM2SHORT( idSubMenu, TRUE ),
             &mi );

 id = (USHORT) WinSendMsg( mi.hwndSubMenu,
                           MM_QUERYDEFAULTITEMID, NULL, NULL );

Credit: Rick Fishman


[Back: How do I make a dynamically changing menu?]
[Next: How do I remove a separator from a menu?]