4 (((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
6 #define MENU_ITEM_TYPE(flags) \
7 ((flags) & (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR))
10 #define MF_END (0x0080)
13 typedef struct tagMENUSTATE
15 PPOPUPMENU pGlobalPopupMenu
;
20 ULONG fInsideMenuLoop
:1;
24 ULONG fButtonAlwaysDown
:1;
26 ULONG fModelessMenu
:1;
27 ULONG fInCallHandleMenuMessages
:1;
30 ULONG fAboutToAutoDismiss
:1;
31 ULONG fIgnoreButtonUp
:1;
32 ULONG fMouseOffMenu
:1;
33 ULONG fInDoDragDrop
:1;
34 ULONG fActiveNoForeground
:1;
42 PTHREADINFO ptiMenuStateOwner
;
44 struct tagMENUSTATE
* pmnsPrev
;
46 ULONG_PTR uButtonDownHitArea
;
47 UINT uButtonDownIndex
;
49 ULONG_PTR uDraggingHitArea
;
60 } MENUSTATE
, *PMENUSTATE
;
62 typedef struct _SETMENUITEMRECT
67 } SETMENUITEMRECT
, *PSETMENUITEMRECT
;
71 // Legacy ReactOS Menu transfer structures.
73 typedef struct tagROSMENUINFO
75 /* ----------- MENUINFO ----------- */
81 DWORD dwContextHelpID
;
83 /* ----------- Extra ----------- */
84 ULONG fFlags
; /* Menu flags (MF_POPUP, MF_SYSMENU) */
85 UINT iItem
; /* Currently focused item */
86 UINT cItems
; /* Number of items in the menu */
87 WORD cxMenu
; /* Width of the whole menu */
88 WORD cyMenu
; /* Height of the whole menu */
90 PWND spwndNotify
; /* window receiving the messages for ownerdraw */
95 HMENU Self
; /* Handle of this menu */
96 HWND Wnd
; /* Window containing the menu */
97 BOOL TimeToHide
; /* Request hiding when receiving a second click in the top-level menu item */
98 } ROSMENUINFO
, *PROSMENUINFO
;
100 typedef struct tagROSMENUITEMINFO
102 /* ----------- MENUITEMINFOW ----------- */
110 HBITMAP hbmpUnchecked
;
115 /* ----------- Extra ----------- */
116 RECT Rect
; /* Item area (relative to menu window) */
117 UINT dxTab
; /* X position of text after Tab */
118 LPWSTR lpstr
; /* Copy of the text pointer in MenuItem->Text */
119 SIZE maxBmpSize
; /* Maximum size of the bitmap items in MIIM_BITMAP state */
120 } ROSMENUITEMINFO
, *PROSMENUITEMINFO
;
125 BOOL FASTCALL
IntIsMenu(HMENU
);
128 IntGetMenuObject(HMENU hMenu
);
130 #define IntReleaseMenuObject(MenuObj) \
131 UserDereferenceObject(MenuObj)
134 UserDestroyMenuObject(PVOID Object
);
137 IntDestroyMenuObject(PMENU MenuObject
, BOOL bRecurse
);
140 IntCloneMenu(PMENU Source
);
143 IntGetMenuItemByFlag(PMENU MenuObject
, UINT uSearchBy
, UINT fFlag
,
144 PMENU
*SubMenu
, PITEM
*MenuItem
,
145 PITEM
*PrevMenuItem
);
148 IntCleanupMenus(struct _EPROCESS
*Process
, PPROCESSINFO Win32Process
);
151 IntInsertMenuItem(_In_ PMENU MenuObject
, UINT uItem
, BOOL fByPosition
, PROSMENUITEMINFO ItemInfo
, PUNICODE_STRING lpstr
);
154 IntGetSystemMenu(PWND Window
, BOOL bRevert
);
156 UINT FASTCALL
IntFindSubMenu(HMENU
*hMenu
, HMENU hSubTarget
);
157 UINT FASTCALL
IntGetMenuState( HMENU hMenu
, UINT uId
, UINT uFlags
);
158 BOOL FASTCALL
IntRemoveMenuItem(PMENU Menu
, UINT uPosition
, UINT uFlags
, BOOL bRecurse
);
159 PITEM FASTCALL
MENU_FindItem( PMENU
*pmenu
, UINT
*nPos
, UINT wFlags
);
160 BOOL FASTCALL
IntMenuItemInfo(PMENU Menu
, UINT Item
, BOOL ByPosition
, PROSMENUITEMINFO UnsafeItemInfo
, BOOL SetOrGet
, PUNICODE_STRING lpstr
);
161 BOOL FASTCALL
IntSetMenu(PWND Wnd
,HMENU Menu
,BOOL
*Changed
);
162 UINT
MENU_DrawMenuBar( HDC hDC
, LPRECT lprect
, PWND pWnd
, BOOL suppress_draw
);
164 VOID
MENU_TrackKbdMenuBar(PWND pwnd
, UINT wParam
, WCHAR wChar
);
165 VOID
MENU_TrackMouseMenuBar( PWND pWnd
, ULONG ht
, POINT pt
);
166 BOOL WINAPI
PopupMenuWndProc(PWND Wnd
,UINT Message
,WPARAM wParam
,LPARAM lParam
,LRESULT
*lResult
);
167 BOOL FASTCALL
IntSetMenuItemInfo(PMENU
, PITEM
, PROSMENUITEMINFO
, PUNICODE_STRING
);
168 PWND
MENU_IsMenuActive(VOID
);
169 void MENU_EndMenu( PWND pwnd
);
170 void FASTCALL
MENU_InitSysMenuPopup(PMENU menu
, DWORD style
, DWORD clsStyle
, LONG HitTest
);
171 INT FASTCALL
IntMenuItemFromPoint(PWND pWnd
, HMENU hMenu
, POINT ptScreen
);
172 BOOL WINAPI
IntTrackPopupMenuEx( PMENU menu
, UINT wFlags
, int x
, int y
, PWND pWnd
, LPTPMPARAMS lpTpm
);