mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:45:44 +00:00
implemented EndMenu()
svn path=/trunk/; revision=7276
This commit is contained in:
parent
023ebb37c2
commit
12c7158866
2 changed files with 100 additions and 18 deletions
|
@ -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.38 2003/12/24 21:10:16 navaraf Exp $
|
||||
/* $Id: menu.c,v 1.39 2003/12/28 00:19:24 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS user32.dll
|
||||
* FILE: lib/user32/windows/menu.c
|
||||
|
@ -65,6 +65,8 @@
|
|||
#define POPUPMENU_CLASS_ATOMA MAKEINTATOMA(32768) /* PopupMenu */
|
||||
#define POPUPMENU_CLASS_ATOMW MAKEINTATOMW(32768) /* PopupMenu */
|
||||
|
||||
static LRESULT WINAPI PopupMenuWndProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
/*********************************************************************
|
||||
* PopupMenu class descriptor
|
||||
*/
|
||||
|
@ -72,11 +74,11 @@ const struct builtin_class_descr POPUPMENU_builtin_class =
|
|||
{
|
||||
POPUPMENU_CLASS_ATOMW, /* name */
|
||||
CS_GLOBALCLASS | CS_SAVEBITS | CS_DBLCLKS, /* style */
|
||||
(WNDPROC) NULL, /* FIXME - procW */
|
||||
(WNDPROC) PopupMenuWndProcW, /* FIXME - procW */
|
||||
(WNDPROC) NULL, /* FIXME - procA */
|
||||
sizeof(MENUINFO *), /* extra */
|
||||
(LPCWSTR) IDC_ARROW, /* cursor */
|
||||
(HBRUSH)COLOR_MENU /* brush */
|
||||
(HBRUSH)(COLOR_MENU + 1) /* brush */
|
||||
};
|
||||
|
||||
|
||||
|
@ -97,6 +99,16 @@ const struct builtin_class_descr POPUPMENU_builtin_class =
|
|||
HFONT hMenuFont = NULL;
|
||||
HFONT hMenuFontBold = NULL;
|
||||
|
||||
static LRESULT WINAPI PopupMenuWndProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(message)
|
||||
{
|
||||
default:
|
||||
return DefWindowProcW(hwnd, message, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* MENUEX_ParseResource
|
||||
*
|
||||
|
@ -593,14 +605,18 @@ EnableMenuItem(HMENU hMenu,
|
|||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
WINBOOL STDCALL
|
||||
EndMenu(VOID)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
/* FIXME - return NtUserEndMenu(); */
|
||||
return FALSE;
|
||||
GUITHREADINFO guii;
|
||||
guii.cbSize = sizeof(GUITHREADINFO);
|
||||
if(GetGUIThreadInfo(GetCurrentThreadId(), &guii) && guii.hwndMenuOwner)
|
||||
{
|
||||
PostMessageW(guii.hwndMenuOwner, WM_CANCELMODE, 0, 0);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1293,7 +1309,7 @@ SetMenuItemInfoW(
|
|||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
WINBOOL
|
||||
STDCALL
|
||||
|
@ -1306,13 +1322,21 @@ TrackPopupMenu(
|
|||
HWND hWnd,
|
||||
CONST RECT *prcRect)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
TPMPARAMS tpm;
|
||||
|
||||
if(prcRect)
|
||||
{
|
||||
tpm.cbSize = sizeof(TPMPARAMS);
|
||||
tpm.rcExclude = *prcRect;
|
||||
}
|
||||
|
||||
return (WINBOOL)NtUserTrackPopupMenuEx(hMenu, uFlags, x, y, hWnd,
|
||||
(prcRect ? &tpm : NULL));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
WINBOOL
|
||||
STDCALL
|
||||
|
@ -1324,8 +1348,7 @@ TrackPopupMenuEx(
|
|||
HWND hwnd,
|
||||
LPTPMPARAMS lptpm)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return (WINBOOL)NtUserTrackPopupMenuEx(hmenu, fuFlags, x, y, hwnd, lptpm);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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.36 2003/12/22 15:30:21 navaraf Exp $
|
||||
/* $Id: menu.c,v 1.37 2003/12/28 00:19:24 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -38,6 +38,7 @@
|
|||
#include <include/guicheck.h>
|
||||
#include <include/window.h>
|
||||
#include <include/color.h>
|
||||
#include <internal/safe.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -1035,6 +1036,16 @@ IntGetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT fByPos, UINT gmdiFlags,
|
|||
return res;
|
||||
}
|
||||
|
||||
|
||||
BOOL FASTCALL
|
||||
IntTrackPopupMenu(PMENU_OBJECT MenuObject, PWINDOW_OBJECT WindowObject,
|
||||
UINT Flags, POINT *Pos, UINT MenuPos, RECT *ExcludeRect)
|
||||
{
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* Internal function. Called when the process is destroyed to free the remaining menu handles.
|
||||
*/
|
||||
|
@ -1607,7 +1618,7 @@ NtUserThunkedMenuItemInfo(
|
|||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
BOOL STDCALL
|
||||
NtUserTrackPopupMenuEx(
|
||||
|
@ -1618,9 +1629,57 @@ NtUserTrackPopupMenuEx(
|
|||
HWND hwnd,
|
||||
LPTPMPARAMS lptpm)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
|
||||
return 0;
|
||||
PMENU_OBJECT MenuObject;
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
TPMPARAMS Safetpm;
|
||||
NTSTATUS Status;
|
||||
POINT Pos;
|
||||
BOOL Ret;
|
||||
|
||||
MenuObject = IntGetMenuObject(hmenu);
|
||||
if(!MenuObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
WindowObject = IntGetWindowObject(hwnd);
|
||||
if(!WindowObject)
|
||||
{
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(lptpm)
|
||||
{
|
||||
Status = MmCopyFromCaller(&Safetpm, lptpm, sizeof(TPMPARAMS));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
if(Safetpm.cbSize != sizeof(TPMPARAMS))
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
Pos.x = x;
|
||||
Pos.y = y;
|
||||
|
||||
Ret = IntTrackPopupMenu(MenuObject, WindowObject, fuFlags, &Pos, 0,
|
||||
(lptpm ? &Safetpm.rcExclude : NULL));
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue