30#define MM_SETMENUHANDLE (WM_USER + 0)
31#define MM_GETMENUHANDLE (WM_USER + 1)
35#define TF_ENDMENU 0x10000
36#define TF_SUSPENDPOPUP 0x20000
37#define TF_SKIPREMOVE 0x40000
43#define MAXMENUDEPTH 30
45#define MNS_STYLE_MASK (MNS_NOCHECK|MNS_MODELESS|MNS_DRAGDROP|MNS_AUTODISMISS|MNS_NOTIFYBYPOS|MNS_CHECKORBMP)
47#define MENUITEMINFO_TYPE_MASK \
48 (MFT_STRING | MFT_BITMAP | MFT_OWNERDRAW | MFT_SEPARATOR | \
49 MFT_MENUBARBREAK | MFT_MENUBREAK | MFT_RADIOCHECK | \
50 MFT_RIGHTORDER | MFT_RIGHTJUSTIFY )
52#define TYPE_MASK (MENUITEMINFO_TYPE_MASK | MF_POPUP | MF_SYSMENU)
54#define STATE_MASK (~TYPE_MASK)
56#define MENUITEMINFO_STATE_MASK (STATE_MASK & ~(MF_BYPOSITION | MF_MOUSESELECT))
58#define MII_STATE_MASK (MFS_GRAYED|MFS_CHECKED|MFS_HILITE|MFS_DEFAULT)
60#define IS_SYSTEM_MENU(MenuInfo) \
61 (!!((MenuInfo)->fFlags & MNF_SYSMENU))
63#define IS_MAGIC_BITMAP(id) ((id) && ((INT_PTR)(id) < 12) && ((INT_PTR)(id) >= -1))
64#define IS_STRING_ITEM(flags) (MF_STRING == MENU_ITEM_TYPE(flags))
67#define MAX_MENU_ITEMS (0x4000)
68#define MAX_GOINTOSUBMENU (0x10)
71#define MENU_COL_SPACE 4
73#define MENU_ITEM_HBMP_SPACE (5)
74#define MENU_BAR_ITEMS_SPACE (12)
75#define SEPARATOR_HEIGHT (5)
76#define MENU_TAB_SPACE (8)
88#define TPM_INTERNAL 0xF0000000
89#define TPM_BUTTONDOWN 0x40000000
90#define TPM_POPUPMENU 0x20000000
95#define UpdateMenuItemState(state, change) \
97 if((change) & MF_GRAYED) { \
98 (state) |= MF_GRAYED; \
100 (state) &= ~MF_GRAYED; \
102 if((change) & MF_DISABLED) { \
103 (state) |= MF_DISABLED; \
105 (state) &= ~MF_DISABLED; \
107 if((change) & MFS_CHECKED) { \
108 (state) |= MFS_CHECKED; \
110 (state) &= ~MFS_CHECKED; \
112 if((change) & MFS_HILITE) { \
113 (state) |= MFS_HILITE; \
115 (state) &= ~MFS_HILITE; \
117 if((change) & MFS_DEFAULT) { \
118 (state) |= MFS_DEFAULT; \
120 (state) &= ~MFS_DEFAULT; \
122 if((change) & MF_MOUSESELECT) { \
123 (state) |= MF_MOUSESELECT; \
125 (state) &= ~MF_MOUSESELECT; \
183#define FreeMenuText(Menu,MenuItem) \
185 if((MENU_ITEM_TYPE((MenuItem)->fType) == MF_STRING) && \
186 (MenuItem)->lpstr.Length) { \
187 DesktopHeapFree(((PMENU)Menu)->head.rpdesk, (MenuItem)->lpstr.Buffer); \
196 Menu->
head.cLockObj++;
207 if (!pMenu)
return NULL;
223 ERR(
"Run away LOOP!\n");
231 ERR(
"Menu is marked for destruction!\n");
280 SubMenu =
item->spSubMenu;
294 if (bRecurse && SubMenu)
338 ERR(
"FIXME Pop up menu window thing'ie\n");
351 TRACE(
"IntDestroyMenuObject %d\n",
ret);
361 NONCLIENTMETRICSW ncm;
366 ncm.cbSize =
sizeof(ncm);
369 ERR(
"MenuInit(): SystemParametersInfo(SPI_GETNONCLIENTMETRICS) failed!\n");
376 ERR(
"MenuInit(): CreateFontIndirectW(hMenuFont) failed!\n");
383 ERR(
"MenuInit(): CreateFontIndirectW(hMenuFontBold) failed!\n");
410 if (!pmenu)
return depth;
421 if( bdepth > subdepth) subdepth = bdepth;
491 for(--
i;
i != 0; --
i) {
511 UINT fallback_pos = 0;
514 if (!menu)
return NULL;
536 else if (
item->wID == *nPos)
543 else if (
item->wID == *nPos)
552 *nPos = fallback_pos;
572 if (!
item->spSubMenu)
576 if (
item->spSubMenu == SubTarget)
601 TRACE(
"(menu=%p pos=%04x flags=%04x)\n",pMenu, nPos,
wFlags);
607 if (bRecurse &&
item->spSubMenu)
619 while (nPos < pMenu->cItems)
651 if (submenu) *submenu = menu;
673 WARN(
"allocation failed\n" );
687 return &newItems[
pos];
703 if (MAX_MENU_ITEMS <= MenuObject->cItems)
709 SubMenu = MenuObject;
723 TRACE(
"IntInsertMenuItemToList = %u %i\n", uItem, (
BOOL)((
INT)uItem >= 0));
780 if(!NewMenuItem)
return FALSE;
786 MenuItem =
Source->rgItems;
787 for (
i = 0;
i <
Source->cItems;
i++, MenuItem++, NewMenuItem++)
791 NewMenuItem->
wID = MenuItem->
wID;
866 ERR(
"SetMenuFlagRtoL\n");
881 if(lpmi->
fMask & MIM_BACKGROUND)
883 if(lpmi->
fMask & MIM_HELPID)
885 if(lpmi->
fMask & MIM_MAXHEIGHT)
887 if(lpmi->
fMask & MIM_MENUDATA)
889 if(lpmi->
fMask & MIM_STYLE)
916 if(lpmi->
fMask & MIM_BACKGROUND)
918 if(lpmi->
fMask & MIM_HELPID)
920 if(lpmi->
fMask & MIM_MAXHEIGHT)
922 if(lpmi->
fMask & MIM_MENUDATA)
924 if(lpmi->
fMask & MIM_STYLE)
926 if(lpmi->
fMask & MIM_APPLYTOSUBMENUS)
932 if (
item->spSubMenu )
952 if ( lpmi->
fMask & MIM_STYLE)
986 lpmii->
wID = MenuItem->
wID;
1035 PMENU SubMenuObject;
1038 if(!MenuItem || !MenuObject || !lpmii)
1044 MenuItem->
fType &= ~MENUITEMINFO_TYPE_MASK;
1052 ERR(
"IntSetMenuItemInfo: Invalid combination of fMask bits used\n");
1087 MenuItem->
fState &= ~MFS_HBMMENUBMP;
1100 MenuItem->
wID = lpmii->
wID;
1121 if (MenuObject == SubMenuObject)
1124 ERR(
"Pop Up Menu Double Trouble!\n");
1129 if (!SubMenuObject)
return FALSE;
1135 ERR(
"Loop detected in menu hierarchy or maximum menu depth exceeded!\n");
1222 if (!(MenuItem =
MENU_FindItem( &MenuObject, &uIDEnableItem, uEnable )))
return (
UINT)-1;
1231 switch (MenuItem->
wID)
1264 if (!(MenuItem =
MENU_FindItem( &MenuObject, &uIDCheckItem, uCheck )))
return -1;
1279 if (!MenuItem)
return FALSE;
1282 for (
i = 0;
i < MenuObject->
cItems;
i++, MenuItem++)
1284 MenuItem->
fState &= ~MFS_DEFAULT;
1288 if(uItem == (
UINT)-1)
1292 MenuItem = MenuObject->
rgItems;
1301 for (
i = 0;
i < MenuObject->
cItems;
i++, MenuItem++)
1303 if (MenuItem->
wID == uItem)
1321 if (!MenuItem)
return -1;
1326 if (
i >= MenuObject->
cItems )
return -1;
1339 if ( -1 !=
ret )
return ret;
1343 return ( fByPos ) ?
i : MenuItem->
wID;
1420 ERR(
"Invalid popup magic bitmap %d\n", (
int)popupMagic);
1466 UINT arrow_bitmap_height;
1468 rect->top += arrow_bitmap_height - menu->
iTop;
1469 rect->bottom += arrow_bitmap_height - menu->
iTop;
1524 if (!menu)
return -1;
1541 TRACE(
"\tlooking for '%c' (0x%02x) in [%p]\n", (
char)
Key,
Key, menu );
1549 if ( !ForceMenuChar )
1566 while (
p !=
NULL &&
p [1] ==
'&');
1643 size->cx = bm.bmWidth;
1644 size->cy = bm.bmHeight;
1662 int bmp_xoffset = 0;
1684 ERR(
"Get Item Data from this Window!!!\n");
1687 ERR(
"Draw Bitmap\n");
1783 top = (
h>bm.bmHeight) ?
rect->top+(
h-bm.bmHeight)/2 :
rect->top;
1795 NtGdiBitBlt(
hdc,
left,
top,
w,
h,
hdcMem, bmp_xoffset, 0,
rop , 0, 0);
1830 UINT arrow_bitmap_width;
1834 TRACE(
"dc=%x owner=%x (%d,%d)\n",
hdc, pwndOwner, orgX, orgY);
1866 TRACE(
"MF_OWNERDRAW id=%04lx size=%dx%d cx %d cy %d\n",
1878 lpitem->
xItem = orgX;
1879 lpitem->
yItem = orgY;
1905 itemheight =
size.cy + 2;
1908 lpitem->
cxItem += 2 * check_bitmap_width;
1911 lpitem->
cxItem += arrow_bitmap_width;
1916 itemheight =
size.cy;
1924 else if (!menuBar) {
1926 lpitem->
cxItem += check_bitmap_width;
1929 lpitem->
cxItem += arrow_bitmap_width;
1936 LONG txtheight, txtwidth;
1967 lpitem->
dxTab += txtwidth;
1968 txtheight =
max( txtheight, tmpheight);
1975 lpitem->
dxTab += txtwidth;
1977 lpitem->
cxItem += 2 + txtwidth;
1978 itemheight =
max( itemheight,
1985 }
else if( menuBar) {
1988 lpitem->
cyItem += itemheight;
2001 return lppop->
cyMax;
2017 int orgX, orgY, maxX, maxTab, maxTabWidth, maxHeight;
2021 if (Menu->
cItems == 0)
return;
2032 while (start < Menu->cItems)
2040 maxTab = maxTabWidth = 0;
2052 maxTab =
max( maxTab, lpitem->
dxTab );
2059 maxX =
max( maxX, maxTab + maxTabWidth );
2064 lpitem->
dxTab = maxTab;
2080 if (Menu->
cyMenu >= maxHeight)
2082 Menu->
cyMenu = maxHeight;
2105 int orgX, orgY, maxY;
2107 if ((lprect ==
NULL) || (lppop ==
NULL))
return;
2108 if (lppop->
cItems == 0)
return;
2116 while (start < lppop->cItems)
2119 orgX = lprect->
left;
2129 TRACE(
"calling MENU_CalcItemSize org=(%d, %d)\n", orgX, orgY );
2134 if (lpitem->cxItem > lprect->
right)
2137 else lpitem->cxItem = lprect->
right;
2139 maxY =
max( maxY, lpitem->cyItem );
2140 orgX = lpitem->cxItem;
2153 lprect->
bottom = maxY + 1;
2158 if (helpPos == ~0
U)
return;
2160 orgY = lpitem->yItem;
2161 orgX = lprect->
right;
2162 for (
i = lppop->
cItems - 1;
i >= helpPos;
i--, lpitem--) {
2163 if (lpitem->yItem != orgY)
break;
2164 if (lpitem->cxItem >= orgX)
break;
2165 lpitem->xItem += orgX - lpitem->cxItem;
2166 lpitem->cxItem = orgX;
2167 orgX = lpitem->xItem;
2178 UINT arrow_bitmap_height;
2187 rect.bottom = arrow_bitmap_height;
2191 rect.top = lppop->
cyMenu - arrow_bitmap_height;
2211 UINT arrow_bitmap_width = 0;
2229 bkgnd = (menuBar && flat_menu) ? COLOR_MENUBAR :
COLOR_MENU;
2235 if(menuBar && !flat_menu) {
2294 TRACE(
"Ownerdraw: owner=%p itemID=%d, itemState=%d, itemAction=%d, "
2295 "hwndItem=%p, hdc=%p, rcItem={%ld,%ld,%ld,%ld}\n", Wnd,
2413 bmprc.right = bmprc.left + lpitem->
cxBmp;
2420 bmprc.bottom = bmprc.top + lpitem->
cyBmp;
2445 check_bitmap_width, check_bitmap_height,
2454 r.right =
r.left + check_bitmap_width;
2465 bmpRect.
left += check_bitmap_width + 2;
2477 rectTemp.
left = rectTemp.
right - check_bitmap_width;
2482 rect.left += check_bitmap_width;
2483 rect.right -= arrow_bitmap_width;
2485 else if( lpitem->
hbmp)
2496 UINT uFormat = menuBar ?
2550 if (!menuBar &&
L'\0' !=
Text[
i])
2604 TRACE(
"DPM wnd=%p dc=%p menu=%p\n", wnd,
hdc, menu);
2622 if (menu && menu->
cItems)
2674 ERR(
"Already in End loop\n");
2790 TRACE(
"owner=%p hmenu=%p\n", pWndOwner, menu);
2813 if( !pWndCreated )
return FALSE;
2820 pPopupMenu = ((
PMENUWND)pWndCreated)->ppopupmenu;
2846#define SHOW_DEBUGRECT 0
2904 if (pExclude->
bottom + height < monitor->rcMonitor.bottom)
2924 if (pExclude->
right + width < monitor->rcMonitor.right)
2949 TRACE(
"owner=%p menu=%p id=0x%04x x=0x%04x y=0x%04x\n",
2950 pwndOwner, menu,
id,
x,
y);
2960 DebugRect(pExclude,
RGB(255, 0, 0));
2971 if (
flags & TPM_LAYOUTRTL)
2988 DebugPoint(
x,
y,
RGB(0, 0, 255));
3002 if (x < monitor->rcMonitor.left)
3007 if (x < monitor->rcMonitor.left ||
x >= monitor->
rcMonitor.
right || bIsPopup)
3012 if (y < monitor->rcMonitor.top)
3016 if (y < monitor->rcMonitor.top ||
y >= monitor->
rcMonitor.
bottom || bIsPopup)
3036 UINT flag_mods[] = {
3065 DebugRect(&rr,
RGB(0, 255, 0));
3073 ERR(
"menu->hWnd bad hwnd %p\n",menu->
hWnd);
3106 UINT arrow_bitmap_height;
3113 rc.
top += arrow_bitmap_height;
3114 rc.
bottom -= arrow_bitmap_height;
3118 if (
item->cyItem > lppop->
iTop + nMaxHeight)
3120 lppop->
iTop =
item->cyItem - nMaxHeight;
3125 else if (
item->yItem < lppop->
iTop)
3145 TRACE(
"M_SI: owner=%p menu=%p index=0x%04x select=0x%04x\n", pwndOwner, menu, wIndex, sendMenuSelect);
3147 if (!menu || !menu->
cItems)
return;
3153 if (menu->
iItem == wIndex)
return;
3178 menu->
iItem = wIndex;
3192 ip->fType |
ip->fState |
3199 else if (sendMenuSelect)
3230 TRACE(
"pwnd=%x menu=%x off=0x%04x\n", pwndOwner, menu,
offset);
3232 if ((!menu) || (!menu->
rgItems))
return;
3249 i >= 0 && i < menu->cItems ;
i +=
offset)
3265 TRACE(
"owner=%x menu=%x 0x%04x\n", pWndOwner, Menu, SendMenuSelect);
3274 if (!(
Item->spSubMenu) ||
3281 if (
Item->spSubMenu)
3320 TRACE(
"owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
3322 if (!Menu)
return Menu;
3421 if(
Flags & TPM_LAYOUTRTL)
3430 if(
Flags & TPM_LAYOUTRTL)
3442 Flags &= (~TPM_VERTICAL);
3457 return Item->spSubMenu;
3474 TRACE(
"%p menu=%p\n", pmt, Menu);
3485 if (!(
Item->spSubMenu))
3527 TRACE(
"%x menu=%x 0x%04x\n", pmt, PtMenu,
Index);
3529 if ( pmt->
TopMenu != PtMenu &&
3552 TRACE(
"%x PtMenu=%p\n", pmt, PtMenu);
3571 if (PtMenu->
iItem !=
id)
3597 TRACE(
"%p pmenu=%x\n", pmt, PtMenu);
3616 if (!(
item->spSubMenu))
3619 if (ExecutedMenuId == -1 || ExecutedMenuId == -2)
return -1;
3620 return ExecutedMenuId;
3649 if (!menu)
return NULL;
3655 if ( pItem ) pItem = &pItem[menu->
iItem];
3717 return item->spSubMenu;
3743 while (i < pmt->TopMenu->cItems) {
3776 TRACE(
"%p [%p] -> %p [%p]\n",
3806 else hNewMenu =
NULL;
3829 WARN(
" -- got confused.\n");
3913 PMENU MenuPrev, MenuTmp;
3915 MenuPrev = MenuTmp = pmt->
TopMenu;
3940 PMENU MenuTmp, MenuPrev;
3943 MenuPrev = MenuTmp = pmt->
TopMenu;
3991 TRACE(
"MenuKeyRight called, cur %p, top %p.\n",
4008 TRACE(
"Going to %d.\n", NextCol);
4047 INT executedMenuId = -1;
4054 if (pti != pwnd->
head.pti)
4056 ERR(
"Not the same PTI!!!!\n");
4066 TRACE(
"MTM : hmenu=%p flags=0x%08x (%d,%d) hwnd=%x\n",
4122 enterIdleSent =
TRUE;
4147 enterIdleSent=
FALSE;
4196 fRemove = (executedMenuId != -1);
4284 if (
msg.wParam ==
L'\r' ||
msg.wParam ==
L' ')
4287 fEndMenu = (executedMenuId != -2);
4294 if (
msg.wParam < 32)
break;
4304 fEndMenu = (executedMenuId != -2);
4369 if (executedMenuId == -1) executedMenuId = 0;
4370 return executedMenuId;
4463 TRACE(
"wnd=%p ht=0x%04x (%ld,%ld)\n", pWnd,
ht,
pt.x,
pt.y);
4519 if( wChar && wChar !=
' ' )
4522 if ( uItem >= (
UINT)(-2) )
4555 if (pti != pWnd->
head.pti)
4557 ERR(
"Must be the same pti!\n");
4561 TRACE(
"hmenu %p flags %04x (%d,%d) hwnd %p lpTpm %p \n",
4643 if (pPopupMenu ==
NULL)
4649 ((
PMENUWND)Wnd)->ppopupmenu = pPopupMenu;
4658 ERR(
"Wrong window class for Menu! fnid %x\n",Wnd->
fnid);
4661 pPopupMenu = ((
PMENUWND)Wnd)->ppopupmenu;
4713 ERR(
"No Window Pop Up!\n");
4735 ERR(
"Bad Menu Handle\n");
4743 pPopupMenu->
spmenu = pmenu;
4755 ERR(
"Someone is passing unknown menu messages %d\n",
Message);
4772 UINT uItem = uItemHilite;
4782 MenuItem->
fState &= ~MF_HILITE;
4784 if (MenuObject->
iItem == uItemHilite)
return TRUE;
4796 DWORD dwExStyle = 0;
4805 dwStyle = pWindowObject->
style;
4806 dwExStyle = pWindowObject->
ExStyle;
5005 PMENU menu, pSubTarget;
5042 ERR(
"Validation of window station handle (%p) failed\n",
5048 if (Menu && Menu->
head.
rpdesk->rpwinstaParent != WinStaObject)
5050 ERR(
"Desktop Window Station does not match Process one!\n");
5237 ERR(
"Failed Item Lookup! %u\n", uItem);
5258 Rect->left += XMove;
5260 Rect->right += XMove;
5261 Rect->bottom += YMove;
5275 if (
NULL == hSysMenu)
5280 if (
NULL == SysMenu)
5332 if (NewMenu ==
NULL)
5366 ERR(
"failed to load system menu!\n");
5425 OldMenu->
fFlags &= ~MNF_SYSMENU;
5480 if (
NULL == NewMenu)
5482 if (
NULL != OldMenu)
5492 if (
NULL != OldMenu)
5503 if (
NULL != NewMenu)
5508 if (
NULL != OldMenu)
5554 Rect.left = leftBorder;
5580 TRACE(
"Enter NtUserCheckMenuItem\n");
5589 TRACE(
"Leave NtUserCheckMenuItem, ret=%lu\n", Ret);
5606 TRACE(
"Enter NtUserDeleteMenu\n");
5615 TRACE(
"Leave NtUserDeleteMenu, ret=%i\n", Ret);
5654 TRACE(
"Enter NtUserGetSystemMenu\n");
5670 TRACE(
"Leave NtUserGetSystemMenu, ret=%p\n", Ret);
5689 TRACE(
"Enter NtUserSetSystemMenu\n");
5713 TRACE(
"Leave NtUserSetSystemMenu, ret=%i\n",
Result);
5730 TRACE(
"Enter NtUserGetTitleBarInfo\n");
5776 TRACE(
"Leave NtUserGetTitleBarInfo, ret=%u\n", retValue);
5812 TRACE(
"Enter NtUserDestroyMenu\n");
5827 TRACE(
"Leave NtUserDestroyMenu, ret=%i\n", Ret);
5844 TRACE(
"Enter NtUserEnableMenuItem\n");
5853 TRACE(
"Leave NtUserEnableMenuItem, ret=%u\n", Ret);
5865 TRACE(
"Enter NtUserEndMenu\n");
5884 TRACE(
"Leave NtUserEndMenu\n");
5907 TRACE(
"Enter NtUserGetMenuBarInfo\n");
5931 WARN(
"called on invalid window: %u\n", pWnd->
pcls->
fnid);
5937 pPopupMenu = ((
PMENUWND)pWnd)->ppopupmenu;
5938 if (pPopupMenu && pPopupMenu->
spmenu)
5950 TRACE(
"GMBI: OBJID_MENU hMenu %p\n",hMenu);
5989 if ((idItem < 0) || ((
ULONG)idItem > Menu->
cItems))
5997 TRACE(
"idItem a 0 %d\n",Ret);
6002 TRACE(
"idItem b %d %d\n", idItem-1, Ret);
6043 TRACE(
"Leave NtUserGetMenuBarInfo, ret=%i\n", Ret);
6056 PMENU Menu, SubMenu;
6059 UINT Ret = 0xFFFFFFFF;
6061 TRACE(
"Enter NtUserGetMenuIndex\n");
6069 for (
i = 0;
i < Menu->
cItems;
i++, MenuItem++)
6073 Ret = MenuItem->
wID;
6079 TRACE(
"Leave NtUserGetMenuIndex, ret=%u\n", Ret);
6102 TRACE(
"Enter NtUserGetMenuItemRect\n");
6125 if (lprcItem ==
NULL)
6144 Rect.right += XMove;
6145 Rect.bottom += YMove;
6165 TRACE(
"Leave NtUserGetMenuItemRect, ret=%i\n", Ret);
6184 TRACE(
"Enter NtUserHiliteMenuItem\n");
6202 TRACE(
"Leave NtUserHiliteMenuItem, ret=%i\n", Ret);
6225 ERR(
"Enter NtUserDrawMenuBarTemp\n");
6260 ERR(
"Leave NtUserDrawMenuBarTemp, ret=%lu\n", Ret);
6281 TRACE(
"Enter NtUserMenuItemFromPoint\n");
6305 Rect.bottom =
mi->cyItem;
6318 TRACE(
"Leave NtUserMenuItemFromPoint, ret=%i\n", Ret);
6347 Rect.left = leftBorder;
6371 TRACE(
"Enter NtUserRemoveMenu\n");
6380 TRACE(
"Leave NtUserRemoveMenu, ret=%i\n", Ret);
6398 TRACE(
"Enter NtUserSetMenu\n");
6423 TRACE(
"Leave NtUserSetMenu, ret=%i\n", Ret);
6434 DWORD dwContextHelpId)
6439 TRACE(
"Enter NtUserSetMenuContextHelpId\n");
6448 TRACE(
"Leave NtUserSetMenuContextHelpId, ret=%i\n", Ret);
6465 TRACE(
"Enter NtUserSetMenuDefaultItem\n");
6474 TRACE(
"Leave NtUserSetMenuDefaultItem, ret=%i\n", Ret);
6489 TRACE(
"Enter NtUserSetMenuFlagRtoL\n");
6498 TRACE(
"Leave NtUserSetMenuFlagRtoL, ret=%i\n", Ret);
6514 TRACE(
"Enter NtUserThunkedMenuInfo\n");
6523 TRACE(
"Leave NtUserThunkedMenuInfo, ret=%i\n", Ret);
6545 TRACE(
"Enter NtUserThunkedMenuItemInfo\n");
6551 RtlInitEmptyUnicodeString(&lstrCaption,
NULL, 0);
6559 if (lpszCaption && lpszCaption->
Buffer)
6567 ERR(
"Failed to capture MenuItem Caption (status 0x%08x)\n",
Status);
6587 TRACE(
"Leave NtUserThunkedMenuItemInfo, ret=%i\n", Ret);
6610 TRACE(
"Enter NtUserTrackPopupMenuEx\n");
6615 ERR(
"TPME : Invalid Menu handle.\n");
6622 ERR(
"TPME : Invalid Window handle.\n");
6644 TRACE(
"Leave NtUserTrackPopupMenuEx, ret=%i\n",Ret);
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
#define UlongToHandle(ul)
#define DBG_DEFAULT_CHANNEL(ch)
HBRUSH APIENTRY IntGdiCreateSolidBrush(COLORREF crColor)
COLORREF FASTCALL IntGdiSetBkColor(_In_ HDC hDC, _In_ COLORREF Color)
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL)
COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color)
COLORREF FASTCALL IntSetDCPenColor(HDC, COLORREF)
COLORREF FASTCALL GreGetBkColor(HDC)
INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode)
int FASTCALL GreGetBkMode(HDC)
COLORREF FASTCALL GreGetTextColor(HDC)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
#define ValidateHwndNoErr(hwnd)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
static const WCHAR Message[]
static const WCHAR Cleanup[]
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
HWND FASTCALL co_UserSetCapture(HWND hWnd)
HWND APIENTRY IntGetCapture(VOID)
#define KeRosDumpStackFrames(Frames, Count)
GLint GLint GLsizei GLsizei GLsizei depth
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble q
GLdouble GLdouble GLdouble GLdouble top
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
static const struct newhuff ht[]
#define EXCEPTION_EXECUTE_HANDLER
struct _MENUWND * PMENUWND
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
#define UserHMGetHandle(obj)
struct _THREADINFO * GetW32ThreadInfo(VOID)
#define MSQ_STATE_MENUOWNER
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
BOOL FASTCALL GreMoveTo(HDC hdc, INT x, INT y, LPPOINT pptOut)
DWORD FASTCALL IntGetSysColor(INT nIndex)
#define MmCopyToCaller(x, y, z)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
HWND FASTCALL MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
DWORD FASTCALL UserGetKeyState(DWORD dwKey)
unsigned __int3264 UINT_PTR
static int rop(int rop, int src, int dst)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNICODE_STRING_MAX_CHARS
BOOL FASTCALL GreSetViewportOrgEx(HDC hDC, int X, int Y, LPPOINT Point)
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateCompatibleDC(_In_opt_ HDC hdc)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiBitBlt(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD rop4, _In_ DWORD crBackColor, _In_ FLONG fl)
__kernel_entry W32KAPI HBRUSH APIENTRY NtGdiSelectBrush(_In_ HDC hdc, _In_ HBRUSH hbrush)
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetStockObject(_In_ INT iObject)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSelectBitmap(_In_ HDC hdc, _In_ HBITMAP hbm)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiDeleteObjectApp(_In_ HANDLE hobj)
__kernel_entry W32KAPI HPEN APIENTRY NtGdiSelectPen(_In_ HDC hdc, _In_ HPEN hpen)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiLineTo(_In_ HDC hdc, _In_ INT x, _In_ INT y)
__kernel_entry W32KAPI HFONT APIENTRY NtGdiSelectFont(_In_ HDC hdc, _In_ HFONT hf)
#define GDI_OBJ_HMGR_POWNED
#define GDI_OBJ_HMGR_PUBLIC
ULONG NTAPI PsGetCurrentProcessSessionId(VOID)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
LRESULT FASTCALL IntDefWindowProc(PWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi)
BOOL UserPaintCaption(PWND pWnd, INT Flags)
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
BOOL FASTCALL IntGetWindowRect(PWND Wnd, RECTL *Rect)
BOOL FASTCALL IntScreenToClient(PWND Wnd, LPPOINT lpPoint)
NTSTATUS FASTCALL IntValidateWindowStationHandle(HWINSTA WindowStation, KPROCESSOR_MODE AccessMode, ACCESS_MASK DesiredAccess, PWINSTATION_OBJECT *Object, POBJECT_HANDLE_INFORMATION pObjectHandleInfo)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
BOOL FASTCALL UserIsEnteredExclusive(VOID)
static __inline VOID UserDerefObjectCo(PVOID obj)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
#define WS_EX_DLGMODALFRAME
_Out_opt_ int _Out_opt_ int * cy
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
WCHAR lfFaceName[LF_FACESIZE]
struct _USER_MESSAGE_QUEUE * MessageQueue
struct tagMENU * spSubMenu
DWORD rgstate[CCHILDREN_TITLEBAR+1]
static VOID ErrorExit(LPTSTR lpszMessage)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define DFCS_MENUARROWDOWN
HDC FASTCALL IntBeginPaint(PWND Window, PPAINTSTRUCT Ps)
BOOL FASTCALL IntEndPaint(PWND Wnd, PPAINTSTRUCT Ps)
VOID FASTCALL co_IntUpdateWindows(PWND Wnd, ULONG Flags, BOOL Recurse)
_In_ HFONT _Out_ PUINT Height
FORCEINLINE PMENU UserGetMenuObject(HMENU hMenu)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
BOOLEAN co_UserDestroyWindow(PVOID Object)
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
DWORD FASTCALL IntGetCharDimensions(HDC hdc, PTEXTMETRICW ptm, PDWORD height)
HFONT FASTCALL GreCreateFontIndirectW(LOGFONTW *lplf)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
INT NTAPI GreGetObject(IN HGDIOBJ hobj, IN INT cbCount, OUT PVOID pvBuffer)
VOID FASTCALL RECTL_vInflateRect(_Inout_ RECTL *rect, _In_ INT dx, _In_ INT dy)
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
FORCEINLINE BOOL RECTL_bPointInRect(_In_ const RECTL *prcl, _In_ INT x, _In_ INT y)
FORCEINLINE VOID RECTL_vOffsetRect(_Inout_ RECTL *prcl, _In_ INT cx, _In_ INT cy)
FORCEINLINE VOID RECTL_vSetEmptyRect(_Out_ RECTL *prcl)
BOOL FASTCALL GreTextOutW(HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cchString)
VOID FASTCALL co_IntSetupOBM(VOID)
HMENU APIENTRY co_IntCallLoadMenu(HINSTANCE hModule, PUNICODE_STRING pMenuName)
BOOL FASTCALL co_UserHideCaret(PWND Window OPTIONAL)
BOOL FASTCALL co_UserShowCaret(PWND Window OPTIONAL)
BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth, INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
PWND FASTCALL UserGetDesktopWindow(VOID)
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
static __inline PVOID DesktopHeapReAlloc(IN PDESKTOP Desktop, IN PVOID lpMem, IN SIZE_T Bytes)
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
BOOL FASTCALL IntTranslateKbdMessage(LPMSG lpMsg, UINT flags)
BOOL FASTCALL IntCallMsgFilter(LPMSG lpmsg, INT code)
LRESULT FASTCALL IntDispatchMessage(PMSG pMsg)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
BOOL FASTCALL co_IntWaitMessage(PWND Window, UINT MsgFilterMin, UINT MsgFilterMax)
BOOL APIENTRY co_IntGetPeekMessage(PMSG pMsg, HWND hWnd, UINT MsgFilterMin, UINT MsgFilterMax, UINT RemoveMsg, BOOL bGMSG)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
PMONITOR FASTCALL UserMonitorFromPoint(IN POINT pt, IN DWORD dwFlags)
PCURICON_OBJECT FASTCALL NC_IconForWindow(PWND pWnd)
DWORD FASTCALL GetNCHitEx(PWND pWnd, POINT pt)
BOOL UserDrawSysMenuButton(PWND pWnd, HDC hDC, LPRECT Rect, BOOL Down)
void FASTCALL NC_GetSysPopupPos(PWND Wnd, RECT *Rect)
void FASTCALL NC_GetInsideRect(PWND Wnd, RECT *rect)
BOOL FASTCALL UserMarkObjectDestroy(PVOID Object)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
PUSER_HANDLE_TABLE gHandleTable
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
VOID FASTCALL UserReferenceObject(PVOID obj)
BOOL FASTCALL UserSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
PWND FASTCALL VerifyWnd(PWND pWnd)
PWND FASTCALL co_UserCreateWindowEx(CREATESTRUCTW *Cs, PUNICODE_STRING ClassName, PLARGE_STRING WindowName, PVOID acbiBuffer, DWORD dwVer)
BOOL FASTCALL IntIsWindow(HWND hWnd)
#define HAS_DLGFRAME(Style, ExStyle)
#define HAS_THINFRAME(Style, ExStyle)
#define HAS_THICKFRAME(Style, ExStyle)
VOID FASTCALL IntGetClientRect(PWND WindowObject, RECTL *Rect)
_In_ DWORD _Out_ _In_ WORD wFlags
ENGAPI ULONG APIENTRY EngGetLastError(VOID)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_POPUP_ALREADY_ACTIVE
#define ERROR_MENU_ITEM_NOT_FOUND
#define ERROR_INVALID_MENU_HANDLE
#define ERROR_INVALID_WINDOW_HANDLE
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define SM_MENUDROPALIGNMENT
BOOL WINAPI EndMenu(void)
int WINAPI FrameRect(_In_ HDC, _In_ LPCRECT, _In_ HBRUSH)
#define HBMMENU_MBAR_RESTORE
#define COLOR_WINDOWFRAME
#define HELPINFO_MENUITEM
MENUINFO CONST * LPCMENUINFO
#define HBMMENU_POPUP_RESTORE
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DFCS_CAPTIONCLOSE
#define HBMMENU_POPUP_MINIMIZE
#define HBMMENU_MBAR_MINIMIZE
#define CCHILDREN_TITLEBAR
#define HBMMENU_MBAR_MINIMIZE_D
#define WS_EX_PALETTEWINDOW
#define GMDI_GOINTOPOPUPS
#define STATE_SYSTEM_FOCUSABLE
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define HBMMENU_POPUP_CLOSE
#define DFCS_CAPTIONRESTORE
#define STATE_SYSTEM_INVISIBLE
#define COLOR_HIGHLIGHTTEXT
struct tagHELPINFO HELPINFO
#define HBMMENU_MBAR_CLOSE
#define STATE_SYSTEM_UNAVAILABLE
#define HBMMENU_MBAR_CLOSE_D
#define HBMMENU_POPUP_MAXIMIZE
#define WS_EX_CONTEXTHELP
#define COLOR_BTNHIGHLIGHT
struct tagMENUITEMINFOW MENUITEMINFOW
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
#define ObDereferenceObject
#define PsGetCurrentProcess