--- np2/win9x/menu.cpp 2005/03/20 13:12:49 1.21 +++ np2/win9x/menu.cpp 2007/12/17 14:52:54 1.30 @@ -10,114 +10,191 @@ #define MFCHECK(a) ((a)?MF_CHECKED:MF_UNCHECKED) -typedef struct { - UINT16 id; - UINT16 str; -} MENUITEMS; +static BOOL searchchildmenu(HMENU hMenu, UINT uID, + HMENU *phmenuRet, UINT *puPos) +{ + UINT nCount; + UINT i; + MENUITEMINFO mii; + + nCount = GetMenuItemCount(hMenu); + for (i=0; iid) { - insertresmenu(menu, pos, MF_BYPOSITION | MF_STRING, - item->id, item->str); - } - else { - InsertMenu(menu, pos, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); - } - item++; - pos++; + if (LoadString(g_hInstance, uID, szString, NELEMENTS(szString))) + { + InsertMenu(hMenu, uPosition, uFlags, uIDNewItem, szString); } } +void menu_addmenubar(HMENU popup, HMENU menubar) +{ + (void)addmenu(popup, 0, menubar, FALSE); +} + // ---- -static const MENUITEMS smenuitem[] = { - {IDM_TOOLWIN, IDS_TOOLWIN}, +void sysmenu_initialize(void) +{ + HMENU hMenu; + UINT uPos; + + hMenu = GetSystemMenu(g_hWndMain, FALSE); + uPos = 0; + #if defined(SUPPORT_KEYDISP) - {IDM_KEYDISP, IDS_KEYDISP}, + uPos += addmenures(hMenu, uPos, IDR_SYSKEYDISP, FALSE); #endif #if defined(SUPPORT_SOFTKBD) - {IDM_SOFTKBD, IDS_SOFTKBD}, + uPos += addmenures(hMenu, uPos, IDR_SYSSOFTKBD, FALSE); #endif - {0, 0}, - {IDM_SCREENCENTER, IDS_SCREENCENTER}, - {IDM_SNAPENABLE, IDS_SNAPENABLE}, - {IDM_BACKGROUND, IDS_BACKGROUND}, - {IDM_BGSOUND, IDS_BGSOUND}, - {0, 0}, - {IDM_SCRNMUL4, IDS_SCRNMUL4}, - {IDM_SCRNMUL6, IDS_SCRNMUL6}, - {IDM_SCRNMUL8, IDS_SCRNMUL8}, - {IDM_SCRNMUL10, IDS_SCRNMUL10}, - {IDM_SCRNMUL12, IDS_SCRNMUL12}, - {IDM_SCRNMUL16, IDS_SCRNMUL16}, - {0, 0}}; -static const MENUITEMS smenuitem2[] = { + uPos += addmenures(hMenu, uPos, IDR_SYS, FALSE); + if (np2oscfg.I286SAVE) + { #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) - {IDM_MEMDBG32, IDS_MEMDBG32}, + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG32, FALSE); #endif - {IDM_MEMORYDUMP, IDS_MEMORYDUMP}, - {IDM_DEBUGUTY, IDS_DEBUGUTY}, - {0, 0}}; - - -void sysmenu_initialize(void) { - - HMENU hMenu; - - hMenu = GetSystemMenu(hWndMain, FALSE); - insertresmenus(hMenu, 0, smenuitem, NELEMENTS(smenuitem)); - if (np2oscfg.I286SAVE) { - insertresmenus(hMenu, 0, smenuitem2, NELEMENTS(smenuitem2)); + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG, FALSE); } } @@ -125,7 +202,7 @@ void sysmenu_settoolwin(UINT8 value) { value &= 1; np2oscfg.toolwin = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_TOOLWIN, MFCHECK(value)); } @@ -133,7 +210,7 @@ void sysmenu_setkeydisp(UINT8 value) { value &= 1; np2oscfg.keydisp = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_KEYDISP, MFCHECK(value)); } @@ -141,7 +218,7 @@ void sysmenu_setwinsnap(UINT8 value) { value &= 1; np2oscfg.WINSNAP = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_SNAPENABLE, MFCHECK(value)); } @@ -151,7 +228,7 @@ void sysmenu_setbackground(UINT8 value) np2oscfg.background &= 2; np2oscfg.background |= (value & 1); - hmenu = GetSystemMenu(hWndMain, FALSE); + hmenu = GetSystemMenu(g_hWndMain, FALSE); if (value & 1) { CheckMenuItem(hmenu, IDM_BACKGROUND, MF_UNCHECKED); EnableMenuItem(hmenu, IDM_BGSOUND, MF_GRAYED); @@ -166,7 +243,7 @@ void sysmenu_setbgsound(UINT8 value) { np2oscfg.background &= 1; np2oscfg.background |= (value & 2); - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_BGSOUND, MFCHECK((value & 2) ^ 2)); } @@ -175,7 +252,7 @@ void sysmenu_setscrnmul(UINT8 value) { HMENU hmenu; // np2cfg.scrnmul = value; - hmenu = GetSystemMenu(hWndMain, FALSE); + hmenu = GetSystemMenu(g_hWndMain, FALSE); CheckMenuItem(hmenu, IDM_SCRNMUL4, MFCHECK(value == 4)); CheckMenuItem(hmenu, IDM_SCRNMUL6, MFCHECK(value == 6)); CheckMenuItem(hmenu, IDM_SCRNMUL8, MFCHECK(value == 8)); @@ -187,121 +264,71 @@ void sysmenu_setscrnmul(UINT8 value) { // ---- -typedef struct { - UINT16 title; - MENUITEMS item[3]; -} DISKMENU; - -static const DISKMENU fddmenu[4] = { - {IDS_FDD1, {{IDM_FDD1OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD1EJECT, IDS_EJECT}}}, - {IDS_FDD2, {{IDM_FDD2OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD2EJECT, IDS_EJECT}}}, - {IDS_FDD3, {{IDM_FDD3OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD3EJECT, IDS_EJECT}}}, - {IDS_FDD4, {{IDM_FDD4OPEN, IDS_OPEN}, - {0, 0}, - {IDM_FDD4EJECT, IDS_EJECT}}}}; - -static void insdiskmenu(HMENU hMenu, UINT pos, const DISKMENU *m) { - - HMENU hSubMenu; - - hSubMenu = CreatePopupMenu(); - insertresmenus(hSubMenu, 0, m->item, 3); - insertresmenu(hMenu, pos, MF_BYPOSITION | MF_POPUP, - (UINT)hSubMenu, m->title); -} +void xmenu_initialize(void) +{ + HMENU hMenu; + UINT uPos; + HMENU hmenuSub; + UINT i; + UINT uSubPos; -#if defined(SUPPORT_SCSI) -static const DISKMENU scsimenu[4] = { - {IDS_SCSI0, {{IDM_SCSI0OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI0EJECT, IDS_REMOVE}}}, - {IDS_SCSI1, {{IDM_SCSI1OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI1EJECT, IDS_REMOVE}}}, - {IDS_SCSI2, {{IDM_SCSI2OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI2EJECT, IDS_REMOVE}}}, - {IDS_SCSI3, {{IDM_SCSI3OPEN, IDS_OPEN}, - {0, 0}, - {IDM_SCSI3EJECT, IDS_REMOVE}}}}; -#endif + hMenu = np2class_gethmenu(g_hWndMain); + uPos = 1; #if defined(SUPPORT_STATSAVE) -static const TCHAR xmenu_stat[] = _T("S&tat"); -static const TCHAR xmenu_statsave[] = _T("Save %u"); -static const TCHAR xmenu_statload[] = _T("Load %u"); - -static void addstatsavemenu(HMENU hMenu, UINT pos) { - - HMENU hSubMenu; - UINT i; - TCHAR buf[16]; - - hSubMenu = CreatePopupMenu(); - for (i=0; i