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 Unknown0,
DWORD Unknown1); DWORD Unknown1);
DWORD BOOL
STDCALL STDCALL
NtUserCallHwndLock( NtUserCallHwndLock(
DWORD Unknown0, HWND hWnd,
DWORD Unknown1); DWORD Unknown1);
DWORD DWORD
@ -814,11 +814,11 @@ DWORD
STDCALL STDCALL
NtUserGetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi); NtUserGetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi);
DWORD HMENU
STDCALL STDCALL
NtUserGetSystemMenu( NtUserGetSystemMenu(
DWORD Unknown0, HWND hWnd,
DWORD Unknown1); BOOL bRevert);
HDESK HDESK
STDCALL STDCALL
@ -1372,12 +1372,12 @@ STDCALL
NtUserSetLogonNotifyWindow( NtUserSetLogonNotifyWindow(
DWORD Unknown0); DWORD Unknown0);
DWORD BOOL
STDCALL STDCALL
NtUserSetMenu( NtUserSetMenu(
DWORD Unknown0, HWND hWnd,
DWORD Unknown1, HMENU hMenu,
DWORD Unknown2); BOOL bRepaint);
BOOL BOOL
STDCALL STDCALL
@ -1453,11 +1453,11 @@ NtUserSetSystemCursor(
DWORD Unknown0, DWORD Unknown0,
DWORD Unknown1); DWORD Unknown1);
DWORD BOOL
STDCALL STDCALL
NtUserSetSystemMenu( NtUserSetSystemMenu(
DWORD Unknown0, HWND hWnd,
DWORD Unknown1); HMENU hMenu);
DWORD DWORD
STDCALL 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS user32.dll * PROJECT: ReactOS user32.dll
@ -490,7 +490,6 @@ DefWndDoPaintNC(HWND hWnd, HRGN clip)
{ {
RECT r = rect; RECT r = rect;
r.bottom = rect.top + GetSystemMetrics(SM_CYMENU); r.bottom = rect.top + GetSystemMetrics(SM_CYMENU);
DbgPrint("Calling MenuDrawMenuBar()\n");
rect.top += MenuDrawMenuBar(hDC, &r, hWnd, FALSE); rect.top += MenuDrawMenuBar(hDC, &r, hWnd, FALSE);
} }
@ -1389,7 +1388,6 @@ DefWndNCCalcSize(HWND hWnd, RECT* Rect)
Rect->bottom -= TmpRect.bottom; Rect->bottom -= TmpRect.bottom;
if (UserHasMenu(hWnd, GetWindowLong(hWnd, GWL_EXSTYLE))) if (UserHasMenu(hWnd, GetWindowLong(hWnd, GWL_EXSTYLE)))
{ {
DbgPrint("Calling MenuGetMenuBarHeight()\n");
Rect->top += MenuGetMenuBarHeight(hWnd, Rect->top += MenuGetMenuBarHeight(hWnd,
Rect->right - Rect->left, Rect->right - Rect->left,
-TmpRect.left, -TmpRect.left,

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * PROJECT: ReactOS user32.dll
* FILE: lib/user32/windows/menu.c * 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)) #define GET_DWORD(ptr) (*(DWORD *)(ptr))
#endif #endif
HFONT hMenuFont = NULL;
HFONT hMenuFontBold = NULL;
/********************************************************************** /**********************************************************************
* MENUEX_ParseResource * MENUEX_ParseResource
* *
@ -241,39 +244,34 @@ static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode )
BOOL BOOL
MenuInit(VOID) MenuInit(VOID)
{ {
return TRUE; NONCLIENTMETRICSW ncm;
/* NONCLIENTMETRICSW ncm;
BITMAP bm;
hStdMnArrow = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_MNARROW)); /* get the menu font */
if (hStdMnArrow == NULL) if(!hMenuFont || !hMenuFontBold)
{ {
return(FALSE); if(!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
}
GetObjectA(hStdMnArrow, sizeof(bm), &bm);
ArrowBitmapWidth = bm.bmWidth;
ArrowBitmapHeight = bm.bmHeight;
if (!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
{ {
return(FALSE); DbgPrint("MenuInit(): SystemParametersInfoW(SPI_GETNONCLIENTMETRICS) failed!\n");
return FALSE;
} }
hMenuFont = CreateFontIndirect(&ncm.lfMenuFont); hMenuFont = CreateFontIndirect(&ncm.lfMenuFont);
if (hMenuFont == NULL) if(hMenuFont == NULL)
{ {
return(FALSE); DbgPrint("MenuInit(): CreateFontIndirect(hMenuFont) failed!\n");
return FALSE;
} }
ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000); ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000);
hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont); hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont);
if (hMenuFontBold == NULL) if(hMenuFontBold == NULL)
{ {
return(FALSE); 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 UINT
MenuDrawMenuBar(HDC hDC, LPRECT Rect, HWND hWnd, BOOL Draw) 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)); return(GetSystemMetrics(SM_CYMENU));
/* /*
ULONG MenuID; ULONG MenuID;
@ -482,6 +483,7 @@ WINBOOL STDCALL
DrawMenuBar(HWND hWnd) DrawMenuBar(HWND hWnd)
{ {
UNIMPLEMENTED UNIMPLEMENTED
/* FIXME - return NtUserCallHwndLock(hWnd, 0x55); */
return FALSE; return FALSE;
} }
@ -504,12 +506,13 @@ WINBOOL STDCALL
EndMenu(VOID) EndMenu(VOID)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
/* FIXME - return NtUserEndMenu(); */
return FALSE; return FALSE;
} }
/* /*
* @unimplemented * @implemented
*/ */
HMENU STDCALL HMENU STDCALL
GetMenu(HWND hWnd) GetMenu(HWND hWnd)
@ -1051,21 +1054,13 @@ RemoveMenu(
/* /*
* @unimplemented * @implemented
*/ */
WINBOOL STDCALL WINBOOL STDCALL
SetMenu(HWND hWnd, SetMenu(HWND hWnd,
HMENU hMenu) HMENU hMenu)
{ {
UNIMPLEMENTED; return NtUserSetMenu(hWnd, hMenu, TRUE);
/* from wine
if (IsWindowVisible(hWnd))
{
SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
}
*/
return FALSE;
} }

View file

@ -34,6 +34,58 @@ typedef struct _MENU_OBJECT
BOOL RtoL; BOOL RtoL;
} MENU_OBJECT, *PMENU_OBJECT; } 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 NTSTATUS FASTCALL
InitMenuImpl(VOID); InitMenuImpl(VOID);

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel

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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -55,9 +55,9 @@ NtUserCallOneParam(
return FALSE; return FALSE;
} }
Result = WindowObject->Menu; Result = WindowObject->Menu;
DbgPrint("ONEPARAM_ROUTINE_GETMENU = 0x%x\n", Result);
W32kReleaseWindowObject(WindowObject); W32kReleaseWindowObject(WindowObject);
return Result; return Result;
case ONEPARAM_ROUTINE_ISWINDOWUNICODE: case ONEPARAM_ROUTINE_ISWINDOWUNICODE:
WindowObject = W32kGetWindowObject((HWND)Param); WindowObject = W32kGetWindowObject((HWND)Param);
if(!WindowObject) 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -91,17 +91,6 @@ NtUserCallHwnd(
return 0; return 0;
} }
DWORD
STDCALL
NtUserCallHwndLock(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD DWORD
STDCALL STDCALL
NtUserCallHwndOpt( NtUserCallHwndOpt(
@ -710,17 +699,6 @@ NtUserGetPriorityClipboardFormat(
return 0; return 0;
} }
DWORD
STDCALL
NtUserGetSystemMenu(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD DWORD
STDCALL STDCALL
NtUserGetThreadState( NtUserGetThreadState(
@ -1055,19 +1033,6 @@ NtUserSetImeHotKey(
return 0; return 0;
} }
DWORD
STDCALL
NtUserSetMenu(
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2)
{
UNIMPLEMENTED
return 0;
}
DWORD DWORD
STDCALL STDCALL
NtUserSetParent( NtUserSetParent(
@ -1103,17 +1068,6 @@ NtUserSetSysColors(
return 0; return 0;
} }
DWORD
STDCALL
NtUserSetSystemMenu(
DWORD Unknown0,
DWORD Unknown1)
{
UNIMPLEMENTED
return 0;
}
DWORD DWORD
STDCALL STDCALL
NtUserSetThreadState( NtUserSetThreadState(

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -46,6 +46,7 @@
#include <include/painting.h> #include <include/painting.h>
#include <include/scroll.h> #include <include/scroll.h>
#include <include/vis.h> #include <include/vis.h>
#include <include/menu.h>
#define NDEBUG #define NDEBUG
#include <win32k/debug1.h> #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 */ /* EOF */