From 5e3cc7bc94998130fc4efd5ca429a67c271659ae Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 9 Jul 2005 04:15:44 +0000 Subject: [PATCH] Implement CheckMenuRadioItem. Not fully tested. svn path=/trunk/; revision=16515 --- reactos/lib/user32/windows/menu.c | 39 +++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/reactos/lib/user32/windows/menu.c b/reactos/lib/user32/windows/menu.c index 97361d26eb1..b181c3c0801 100644 --- a/reactos/lib/user32/windows/menu.c +++ b/reactos/lib/user32/windows/menu.c @@ -3475,7 +3475,7 @@ CheckMenuItem(HMENU hmenu, /* - * @unimplemented + * @implemented */ BOOL STDCALL CheckMenuRadioItem(HMENU hmenu, @@ -3484,8 +3484,43 @@ CheckMenuRadioItem(HMENU hmenu, UINT idCheck, UINT uFlags) { + ROSMENUINFO mi; + PROSMENUITEMINFO Items; + int i; + BOOL ret = FALSE; + + mi.cbSize = sizeof(MENUINFO); + UNIMPLEMENTED; - return FALSE; + + if(idFirst > idLast) return ret; + + if(!NtUserMenuInfo(hmenu, &mi, FALSE)) return ret; + + if(MenuGetAllRosMenuItemInfo(mi.Self, &Items) <= 0) return ret; + + for (i = 0 ; i < mi.MenuItemCount; i++) + { + if (0 != (Items[i].fType & MF_MENUBARBREAK)) break; + if ( i >= idFirst && i <= idLast ) + { + if ( i == idCheck) + { + Items[i].fType |= MFT_RADIOCHECK; + Items[i].fState |= MFS_CHECKED; + } + else + { + Items[i].fType &= ~MFT_RADIOCHECK; + Items[i].fState &= ~MFS_CHECKED; + } + if(!MenuSetRosMenuItemInfo(mi.Self, i ,&Items[i])) + break; + } + if ( i == mi.MenuItemCount) ret = TRUE; + } + MenuCleanupRosMenuItemInfo(Items); + return ret; }