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