Implement ModifyMenu A & W.

svn path=/trunk/; revision=16517
This commit is contained in:
James Tabor 2005-07-09 04:23:34 +00:00
parent b2bf468fad
commit 7022204505

View file

@ -4300,7 +4300,7 @@ MenuItemFromPoint(
/*
* @unimplemented
* @implemented
*/
BOOL
STDCALL
@ -4311,13 +4311,93 @@ ModifyMenuA(
UINT_PTR uIDNewItem,
LPCSTR lpNewItem)
{
MENUITEMINFOA mii;
mii.cbSize = sizeof(MENUITEMINFOA);
mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE;
mii.fType = 0;
mii.fState = MFS_ENABLED;
UNIMPLEMENTED;
return FALSE;
if(!GetMenuItemInfoA( hMnu,
uPosition,
(BOOL)!(MF_BYPOSITION & uFlags),
&mii)) return FALSE;
if(uFlags & MF_BITMAP)
{
mii.fType |= MFT_BITMAP;
mii.fMask |= MIIM_BITMAP;
mii.hbmpItem = (HBITMAP) lpNewItem;
}
else if(uFlags & MF_OWNERDRAW)
{
mii.fType |= MFT_OWNERDRAW;
mii.fMask |= MIIM_DATA;
mii.dwItemData = (DWORD) lpNewItem;
}
else /* Default action MF_STRING. */
{
if(mii.dwTypeData != NULL)
{
HeapFree(GetProcessHeap(),0, mii.dwTypeData);
}
/* Item beginning with a backspace is a help item */
if (*lpNewItem == '\b')
{
mii.fType |= MF_HELP;
lpNewItem++;
}
mii.fMask |= MIIM_TYPE;
mii.dwTypeData = (LPSTR)lpNewItem;
mii.cch = (NULL == lpNewItem ? 0 : strlen(lpNewItem));
}
if(uFlags & MF_RIGHTJUSTIFY)
{
mii.fType |= MFT_RIGHTJUSTIFY;
}
if(uFlags & MF_MENUBREAK)
{
mii.fType |= MFT_MENUBREAK;
}
if(uFlags & MF_MENUBARBREAK)
{
mii.fType |= MFT_MENUBARBREAK;
}
if(uFlags & MF_DISABLED)
{
mii.fState |= MFS_DISABLED;
}
if(uFlags & MF_GRAYED)
{
mii.fState |= MFS_GRAYED;
}
if ((mii.fType & MF_POPUP) && (uFlags & MF_POPUP) && (mii.hSubMenu != (HMENU)uIDNewItem))
NtUserDestroyMenu( mii.hSubMenu ); /* ModifyMenu() spec */
if(uFlags & MF_POPUP)
{
mii.fType |= MF_POPUP;
mii.fMask |= MIIM_SUBMENU;
mii.hSubMenu = (HMENU)uIDNewItem;
}
else
{
mii.fMask |= MIIM_ID;
mii.wID = (UINT)uIDNewItem;
}
return SetMenuItemInfoA( hMnu,
uPosition,
(BOOL)!(MF_BYPOSITION & uFlags),
&mii);
}
/*
* @unimplemented
* @implemented
*/
BOOL
STDCALL
@ -4328,8 +4408,88 @@ ModifyMenuW(
UINT_PTR uIDNewItem,
LPCWSTR lpNewItem)
{
MENUITEMINFOW mii;
mii.cbSize = sizeof(MENUITEMINFOW);
mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE;
mii.fType = 0;
mii.fState = MFS_ENABLED;
UNIMPLEMENTED;
return FALSE;
if(!NtUserMenuItemInfo( hMnu,
uPosition,
(BOOL)!(MF_BYPOSITION & uFlags),
(PROSMENUITEMINFO) &mii,
FALSE)) return FALSE;
if(uFlags & MF_BITMAP)
{
mii.fType |= MFT_BITMAP;
mii.fMask |= MIIM_BITMAP;
mii.hbmpItem = (HBITMAP) lpNewItem;
}
else if(uFlags & MF_OWNERDRAW)
{
mii.fType |= MFT_OWNERDRAW;
mii.fMask |= MIIM_DATA;
mii.dwItemData = (DWORD) lpNewItem;
}
else
{
if(mii.dwTypeData != NULL)
{
HeapFree(GetProcessHeap(),0, mii.dwTypeData);
}
if (*lpNewItem == '\b')
{
mii.fType |= MF_HELP;
lpNewItem++;
}
mii.fMask |= MIIM_TYPE;
mii.dwTypeData = (LPWSTR)lpNewItem;
mii.cch = (NULL == lpNewItem ? 0 : wcslen(lpNewItem));
}
if(uFlags & MF_RIGHTJUSTIFY)
{
mii.fType |= MFT_RIGHTJUSTIFY;
}
if(uFlags & MF_MENUBREAK)
{
mii.fType |= MFT_MENUBREAK;
}
if(uFlags & MF_MENUBARBREAK)
{
mii.fType |= MFT_MENUBARBREAK;
}
if(uFlags & MF_DISABLED)
{
mii.fState |= MFS_DISABLED;
}
if(uFlags & MF_GRAYED)
{
mii.fState |= MFS_GRAYED;
}
if ((mii.fType & MF_POPUP) && (uFlags & MF_POPUP) && (mii.hSubMenu != (HMENU)uIDNewItem))
NtUserDestroyMenu( mii.hSubMenu );
if(uFlags & MF_POPUP)
{
mii.fType |= MF_POPUP;
mii.fMask |= MIIM_SUBMENU;
mii.hSubMenu = (HMENU)uIDNewItem;
}
else
{
mii.fMask |= MIIM_ID;
mii.wID = (UINT)uIDNewItem;
}
return SetMenuItemInfoW( hMnu,
uPosition,
(BOOL)!(MF_BYPOSITION & uFlags),
&mii);
}