Some changes for menus and unstubbed NtUserGetSystemMenu(), NtUserSetSystemMenu() and NtUserCallHwndLock()

svn path=/trunk/; revision=5431
This commit is contained in:
Thomas Bluemel 2003-08-06 13:17:44 +00:00
parent e5793b92ec
commit 461b5018b2
8 changed files with 207 additions and 108 deletions

View file

@ -115,10 +115,10 @@ NtUserCallHwnd(
DWORD Unknown0,
DWORD Unknown1);
DWORD
BOOL
STDCALL
NtUserCallHwndLock(
DWORD Unknown0,
HWND hWnd,
DWORD Unknown1);
DWORD
@ -814,11 +814,11 @@ DWORD
STDCALL
NtUserGetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi);
DWORD
HMENU
STDCALL
NtUserGetSystemMenu(
DWORD Unknown0,
DWORD Unknown1);
HWND hWnd,
BOOL bRevert);
HDESK
STDCALL
@ -1372,12 +1372,12 @@ STDCALL
NtUserSetLogonNotifyWindow(
DWORD Unknown0);
DWORD
BOOL
STDCALL
NtUserSetMenu(
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2);
HWND hWnd,
HMENU hMenu,
BOOL bRepaint);
BOOL
STDCALL
@ -1453,11 +1453,11 @@ NtUserSetSystemCursor(
DWORD Unknown0,
DWORD Unknown1);
DWORD
BOOL
STDCALL
NtUserSetSystemMenu(
DWORD Unknown0,
DWORD Unknown1);
HWND hWnd,
HMENU hMenu);
DWORD
STDCALL

View file

@ -1,4 +1,4 @@
/* $Id: defwnd.c,v 1.60 2003/08/06 11:32:17 weiden Exp $
/* $Id: defwnd.c,v 1.61 2003/08/06 13:17:43 weiden Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS user32.dll
@ -490,7 +490,6 @@ DefWndDoPaintNC(HWND hWnd, HRGN clip)
{
RECT r = rect;
r.bottom = rect.top + GetSystemMetrics(SM_CYMENU);
DbgPrint("Calling MenuDrawMenuBar()\n");
rect.top += MenuDrawMenuBar(hDC, &r, hWnd, FALSE);
}
@ -1389,7 +1388,6 @@ DefWndNCCalcSize(HWND hWnd, RECT* Rect)
Rect->bottom -= TmpRect.bottom;
if (UserHasMenu(hWnd, GetWindowLong(hWnd, GWL_EXSTYLE)))
{
DbgPrint("Calling MenuGetMenuBarHeight()\n");
Rect->top += MenuGetMenuBarHeight(hWnd,
Rect->right - Rect->left,
-TmpRect.left,

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: menu.c,v 1.18 2003/08/06 11:32:17 weiden Exp $
/* $Id: menu.c,v 1.19 2003/08/06 13:17:43 weiden Exp $
*
* PROJECT: ReactOS user32.dll
* FILE: lib/user32/windows/menu.c
@ -119,6 +119,9 @@ STATIC HEAP_strdupA2W ( HANDLE hHeap, LPWSTR* ppszW, LPCSTR lpszA, UINT* NewLen
#define GET_DWORD(ptr) (*(DWORD *)(ptr))
#endif
HFONT hMenuFont = NULL;
HFONT hMenuFontBold = NULL;
/**********************************************************************
* MENUEX_ParseResource
*
@ -241,39 +244,34 @@ static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode )
BOOL
MenuInit(VOID)
{
return TRUE;
/* NONCLIENTMETRICSW ncm;
BITMAP bm;
hStdMnArrow = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_MNARROW));
if (hStdMnArrow == NULL)
{
return(FALSE);
}
GetObjectA(hStdMnArrow, sizeof(bm), &bm);
ArrowBitmapWidth = bm.bmWidth;
ArrowBitmapHeight = bm.bmHeight;
if (!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
{
return(FALSE);
}
hMenuFont = CreateFontIndirect(&ncm.lfMenuFont);
if (hMenuFont == NULL)
{
return(FALSE);
}
ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000);
NONCLIENTMETRICSW ncm;
hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont);
if (hMenuFontBold == NULL)
/* get the menu font */
if(!hMenuFont || !hMenuFontBold)
{
if(!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
{
return(FALSE);
DbgPrint("MenuInit(): SystemParametersInfoW(SPI_GETNONCLIENTMETRICS) failed!\n");
return FALSE;
}
hMenuFont = CreateFontIndirect(&ncm.lfMenuFont);
if(hMenuFont == NULL)
{
DbgPrint("MenuInit(): CreateFontIndirect(hMenuFont) failed!\n");
return FALSE;
}
ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000);
hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont);
if(hMenuFontBold == NULL)
{
DbgPrint("MenuInit(): CreateFontIndirect(hMenuFontBold) failed!\n");
return FALSE;
}
}
return(TRUE);*/
return TRUE;
}
@ -304,6 +302,9 @@ MenuGetMenuBarHeight(HWND hWnd, ULONG MenuBarWidth, LONG OrgX, LONG OrgY)
UINT
MenuDrawMenuBar(HDC hDC, LPRECT Rect, HWND hWnd, BOOL Draw)
{
HFONT hFontOld = SelectObject(hDC, hMenuFont);
//DrawTextA(hDC, "This is the menu bar", 19, Rect, DT_SINGLELINE);
SelectObject(hDC, hFontOld);
return(GetSystemMetrics(SM_CYMENU));
/*
ULONG MenuID;
@ -482,6 +483,7 @@ WINBOOL STDCALL
DrawMenuBar(HWND hWnd)
{
UNIMPLEMENTED
/* FIXME - return NtUserCallHwndLock(hWnd, 0x55); */
return FALSE;
}
@ -504,12 +506,13 @@ WINBOOL STDCALL
EndMenu(VOID)
{
UNIMPLEMENTED;
/* FIXME - return NtUserEndMenu(); */
return FALSE;
}
/*
* @unimplemented
* @implemented
*/
HMENU STDCALL
GetMenu(HWND hWnd)
@ -1051,21 +1054,13 @@ RemoveMenu(
/*
* @unimplemented
* @implemented
*/
WINBOOL STDCALL
SetMenu(HWND hWnd,
HMENU hMenu)
{
UNIMPLEMENTED;
/* from wine
if (IsWindowVisible(hWnd))
{
SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
}
*/
return FALSE;
return NtUserSetMenu(hWnd, hMenu, TRUE);
}

View file

@ -34,6 +34,58 @@ typedef struct _MENU_OBJECT
BOOL RtoL;
} MENU_OBJECT, *PMENU_OBJECT;
PMENU_OBJECT FASTCALL
W32kGetMenuObject(HMENU hMenu);
VOID FASTCALL
W32kReleaseMenuObject(PMENU_OBJECT MenuObject);
BOOL FASTCALL
W32kFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem,
BOOL RemoveFromList, BOOL bRecurse);
UINT FASTCALL
W32kDeleteMenuItems(PMENU_OBJECT MenuObject, BOOL bRecurse);
BOOL FASTCALL
W32kDestroyMenuObject(PMENU_OBJECT MenuObject);
PMENU_OBJECT FASTCALL
W32kCreateMenu(PHANDLE Handle);
BOOL FASTCALL
W32kSetMenuFlagRtoL(PMENU_OBJECT MenuObject);
BOOL FASTCALL
W32kSetMenuContextHelpId(PMENU_OBJECT MenuObject, DWORD dwContextHelpId);
BOOL FASTCALL
W32kGetMenuInfo(PMENU_OBJECT MenuObject, LPMENUINFO lpmi);
BOOL FASTCALL
W32kSetMenuInfo(PMENU_OBJECT MenuObject, LPMENUINFO lpmi);
int FASTCALL
W32kGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag, PMENU_ITEM *MenuItem);
BOOL FASTCALL
W32kSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, LPCMENUITEMINFOW lpmii);
BOOL FASTCALL
W32kInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, WINBOOL fByPosition,
LPCMENUITEMINFOW lpmii);
UINT FASTCALL
W32kEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable);
DWORD FASTCALL
W32kCheckMenuItem(PMENU_OBJECT MenuObject, UINT uIDCheckItem, UINT uCheck);
BOOL FASTCALL
W32kSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos);
NTSTATUS FASTCALL
InitMenuImpl(VOID);

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: menu.c,v 1.10 2003/08/06 11:32:17 weiden Exp $
/* $Id: menu.c,v 1.11 2003/08/06 13:17:44 weiden Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -884,7 +884,7 @@ BOOL STDCALL
NtUserEndMenu(VOID)
{
UNIMPLEMENTED
return 0;
}

View file

@ -1,4 +1,4 @@
/* $Id: misc.c,v 1.2 2003/08/06 11:32:17 weiden Exp $
/* $Id: misc.c,v 1.3 2003/08/06 13:17:44 weiden Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -55,9 +55,9 @@ NtUserCallOneParam(
return FALSE;
}
Result = WindowObject->Menu;
DbgPrint("ONEPARAM_ROUTINE_GETMENU = 0x%x\n", Result);
W32kReleaseWindowObject(WindowObject);
return Result;
case ONEPARAM_ROUTINE_ISWINDOWUNICODE:
WindowObject = W32kGetWindowObject((HWND)Param);
if(!WindowObject)

View file

@ -1,4 +1,4 @@
/* $Id: stubs.c,v 1.23 2003/08/06 11:32:17 weiden Exp $
/* $Id: stubs.c,v 1.24 2003/08/06 13:17:44 weiden Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -91,17 +91,6 @@ NtUserCallHwnd(
return 0;
}
DWORD
STDCALL
NtUserCallHwndLock(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD
STDCALL
NtUserCallHwndOpt(
@ -710,17 +699,6 @@ NtUserGetPriorityClipboardFormat(
return 0;
}
DWORD
STDCALL
NtUserGetSystemMenu(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD
STDCALL
NtUserGetThreadState(
@ -1055,19 +1033,6 @@ NtUserSetImeHotKey(
return 0;
}
DWORD
STDCALL
NtUserSetMenu(
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2)
{
UNIMPLEMENTED
return 0;
}
DWORD
STDCALL
NtUserSetParent(
@ -1103,17 +1068,6 @@ NtUserSetSysColors(
return 0;
}
DWORD
STDCALL
NtUserSetSystemMenu(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD
STDCALL
NtUserSetThreadState(

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: window.c,v 1.77 2003/08/05 15:41:03 weiden Exp $
/* $Id: window.c,v 1.78 2003/08/06 13:17:44 weiden Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -46,6 +46,7 @@
#include <include/painting.h>
#include <include/scroll.h>
#include <include/vis.h>
#include <include/menu.h>
#define NDEBUG
#include <win32k/debug1.h>
@ -2287,4 +2288,103 @@ NtUserGetLastActivePopup(HWND hWnd)
}
/*
* @implemented
*/
BOOL
STDCALL
NtUserSetMenu(
HWND hWnd,
HMENU hMenu,
BOOL bRepaint)
{
PWINDOW_OBJECT WindowObject;
PMENU_OBJECT MenuObject;
WindowObject = W32kGetWindowObject((HWND)hWnd);
if(!WindowObject)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return FALSE;
}
if(hMenu)
{
/* assign new menu handle */
MenuObject = W32kGetMenuObject((HWND)hMenu);
if(!MenuObject)
{
W32kReleaseWindowObject(WindowObject);
SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
return FALSE;
}
WindowObject->Menu = hMenu;
}
else
{
/* remove the menu handle */
WindowObject->Menu = 0;
}
W32kReleaseMenuObject(MenuObject);
W32kReleaseWindowObject(WindowObject);
/* FIXME (from wine)
if(bRepaint)
{
if (IsWindowVisible(hWnd))
SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED );
}
*/
return TRUE;
}
/*
* @unimplemented
*/
HMENU
STDCALL
NtUserGetSystemMenu(
HWND hWnd,
BOOL bRevert)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
BOOL
STDCALL
NtUserSetSystemMenu(
HWND hWnd,
HMENU hMenu)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
BOOL
STDCALL
NtUserCallHwndLock(
HWND hWnd,
DWORD Unknown1)
{
UNIMPLEMENTED
/* DrawMenuBar() calls it with Unknown1==0x55 */
return 0;
}
/* EOF */