User32LoadSysMenuTemplateForKernel(PVOID Arguments, ULONG ArgumentLength)
{
LRESULT Result;
- HMODULE hUser32;
- hUser32 = GetModuleHandleW(L"USER32");
- Result = (LRESULT)LoadMenuW(hUser32, L"SYSMENU");
+ Result = (LRESULT)LoadMenuW(User32Instance, L"SYSMENU");
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
}
if(hMenuFontBold == NULL)
{
DbgPrint("MenuInit(): CreateFontIndirectW(hMenuFontBold) failed!\n");
+ DeleteObject(hMenuFont);
+ hMenuFont = NULL;
return FALSE;
}
}
}
+VOID
+MenuCleanup(VOID)
+{
+ if (hMenuFont)
+ {
+ DeleteObject(hMenuFont);
+ hMenuFont = NULL;
+ }
+
+ if (hMenuFontBold)
+ {
+ DeleteObject(hMenuFontBold);
+ hMenuFontBold = NULL;
+ }
+}
+
+
+
/***********************************************************************
* MenuCalcItemSize
*
case WM_SYSKEYDOWN:
switch (Msg.wParam)
{
+ DbgPrint("Menu.c WM_SYSKEYDOWN wPram %d\n",Msg.wParam);
case VK_MENU:
fEndMenu = TRUE;
break;
+ case VK_LMENU:
+ fEndMenu = TRUE;
+ break;
}
break; /* WM_SYSKEYDOWN */
mii.fMask |= MIIM_ID;
mii.wID = (UINT)uIDNewItem;
}
- return InsertMenuItemA(hMenu, uPosition, (BOOL)!(MF_BYPOSITION & uFlags), &mii);
+ return InsertMenuItemA(hMenu, uPosition, (BOOL)((MF_BYPOSITION & uFlags) > 0), &mii);
}
mii.fMask |= MIIM_ID;
mii.wID = (UINT)uIDNewItem;
}
- return InsertMenuItemW(hMenu, uPosition, (BOOL)!(MF_BYPOSITION & uFlags), &mii);
+ return InsertMenuItemW(hMenu, uPosition, (BOOL)((MF_BYPOSITION & uFlags) > 0), &mii);
}
LPCSTR lpNewItem)
{
MENUITEMINFOA mii;
+ memset( &mii, 0, sizeof(mii) );
mii.cbSize = sizeof(MENUITEMINFOA);
mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE;
mii.fType = 0;
if(!GetMenuItemInfoA( hMnu,
uPosition,
- (BOOL)!(MF_BYPOSITION & uFlags),
+ (BOOL)(MF_BYPOSITION & uFlags),
&mii)) return FALSE;
if(uFlags & MF_BITMAP)
return SetMenuItemInfoA( hMnu,
uPosition,
- (BOOL)!(MF_BYPOSITION & uFlags),
+ (BOOL)(MF_BYPOSITION & uFlags),
&mii);
}
LPCWSTR lpNewItem)
{
MENUITEMINFOW mii;
+ memset ( &mii, 0, sizeof(mii) );
mii.cbSize = sizeof(MENUITEMINFOW);
mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE;
- mii.fType = 0;
mii.fState = MFS_ENABLED;
UNIMPLEMENTED;
if(!NtUserMenuItemInfo( hMnu,
uPosition,
- (BOOL)!(MF_BYPOSITION & uFlags),
+ (BOOL)(MF_BYPOSITION & uFlags),
(PROSMENUITEMINFO) &mii,
FALSE)) return FALSE;
}
else
{
- if(mii.dwTypeData != NULL)
+ /*if(mii.dwTypeData != NULL)
{
HeapFree(GetProcessHeap(),0, mii.dwTypeData);
- }
+ }*/
if (*lpNewItem == '\b')
{
mii.fType |= MF_HELP;
return SetMenuItemInfoW( hMnu,
uPosition,
- (BOOL)!(MF_BYPOSITION & uFlags),
+ (BOOL)(MF_BYPOSITION & uFlags),
&mii);
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
HBITMAP hBitmapUnchecked,
HBITMAP hBitmapChecked)
{
- UNIMPLEMENTED;
- return FALSE;
+ ROSMENUITEMINFO uItem;
+
+ if(!(NtUserMenuItemInfo(hMenu, uPosition,
+ (BOOL)(MF_BYPOSITION & uFlags), &uItem, FALSE))) return FALSE;
+
+ if (!hBitmapChecked && !hBitmapUnchecked)
+ {
+ uItem.fState &= ~MF_USECHECKBITMAPS;
+ }
+ else /* Install new bitmaps */
+ {
+ uItem.hbmpChecked = hBitmapChecked;
+ uItem.hbmpUnchecked = hBitmapUnchecked;
+ uItem.fState |= MF_USECHECKBITMAPS;
+ }
+ return NtUserMenuItemInfo(hMenu, uPosition,
+ (BOOL)(MF_BYPOSITION & uFlags), &uItem, TRUE);
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
MENUITEMINFOW MenuItemInfoW;
RtlCopyMemory(&MenuItemInfoW, lpmii, min(lpmii->cbSize, sizeof(MENUITEMINFOW)));
- MenuItemInfoW.cch = wcslen(MenuItemInfoW.dwTypeData);
+ if (0 != (MenuItemInfoW.fMask & MIIM_STRING))
+ {
+ MenuItemInfoW.cch = wcslen(MenuItemInfoW.dwTypeData);
+ }
return NtUserMenuItemInfo(hMenu, uItem, fByPosition,
(PROSMENUITEMINFO)&MenuItemInfoW, TRUE);