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));
3000 if (x < monitor->rcMonitor.left)
3005 if (x < monitor->rcMonitor.left ||
x >= monitor->
rcMonitor.
right || bIsPopup)
3010 if (y < monitor->rcMonitor.top)
3014 if (y < monitor->rcMonitor.top ||
y >= monitor->
rcMonitor.
bottom || bIsPopup)
3041 UINT flag_mods[] = {
3070 DebugRect(&rr,
RGB(0, 255, 0));
3078 ERR(
"menu->hWnd bad hwnd %p\n",menu->
hWnd);
3111 UINT arrow_bitmap_height;
3118 rc.
top += arrow_bitmap_height;
3119 rc.
bottom -= arrow_bitmap_height;
3123 if (
item->cyItem > lppop->
iTop + nMaxHeight)
3125 lppop->
iTop =
item->cyItem - nMaxHeight;
3130 else if (
item->yItem < lppop->
iTop)
3150 TRACE(
"M_SI: owner=%p menu=%p index=0x%04x select=0x%04x\n", pwndOwner, menu, wIndex, sendMenuSelect);
3152 if (!menu || !menu->
cItems)
return;
3158 if (menu->
iItem == wIndex)
return;
3183 menu->
iItem = wIndex;
3197 ip->fType |
ip->fState |
3204 else if (sendMenuSelect)
3235 TRACE(
"pwnd=%x menu=%x off=0x%04x\n", pwndOwner, menu,
offset);
3237 if ((!menu) || (!menu->
rgItems))
return;
3254 i >= 0 && i < menu->cItems ;
i +=
offset)
3270 TRACE(
"owner=%x menu=%x 0x%04x\n", pWndOwner, Menu, SendMenuSelect);
3279 if (!(
Item->spSubMenu) ||
3286 if (
Item->spSubMenu)
3328 TRACE(
"owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
3330 if (!Menu)
return Menu;
3429 if(
Flags & TPM_LAYOUTRTL)
3438 if(
Flags & TPM_LAYOUTRTL)
3450 Flags &= (~TPM_VERTICAL);
3465 return Item->spSubMenu;
3482 TRACE(
"%p menu=%p\n", pmt, Menu);
3493 if (!(
Item->spSubMenu))
3535 TRACE(
"%x menu=%x 0x%04x\n", pmt, PtMenu,
Index);
3537 if ( pmt->
TopMenu != PtMenu &&
3560 TRACE(
"%x PtMenu=%p\n", pmt, PtMenu);
3579 if (PtMenu->
iItem !=
id)
3605 TRACE(
"%p pmenu=%x\n", pmt, PtMenu);
3624 if (!(
item->spSubMenu))
3627 if (ExecutedMenuId == -1 || ExecutedMenuId == -2)
return -1;
3628 return ExecutedMenuId;
3657 if (!menu)
return NULL;
3663 if ( pItem ) pItem = &pItem[menu->
iItem];
3725 return item->spSubMenu;
3751 while (i < pmt->TopMenu->cItems) {
3784 TRACE(
"%p [%p] -> %p [%p]\n",
3814 else hNewMenu =
NULL;
3837 WARN(
" -- got confused.\n");
3921 PMENU MenuPrev, MenuTmp;
3923 MenuPrev = MenuTmp = pmt->
TopMenu;
3948 PMENU MenuTmp, MenuPrev;
3951 MenuPrev = MenuTmp = pmt->
TopMenu;
3999 TRACE(
"MenuKeyRight called, cur %p, top %p.\n",
4016 TRACE(
"Going to %d.\n", NextCol);
4055 INT executedMenuId = -1;
4064 if (pti != pwnd->
head.pti)
4066 ERR(
"Not the same PTI!!!!\n");
4076 TRACE(
"MTM : hmenu=%p flags=0x%08x (%d,%d) hwnd=%x\n",
4132 enterIdleSent =
TRUE;
4157 enterIdleSent=
FALSE;
4222 fRemove = (executedMenuId != -1);
4312 if (
msg.wParam ==
L'\r' ||
msg.wParam ==
L' ')
4315 fEndMenu = (executedMenuId != -2);
4322 if (
msg.wParam < 32)
break;
4332 fEndMenu = (executedMenuId != -2);
4397 if (executedMenuId == -1) executedMenuId = 0;
4398 return executedMenuId;
4491 TRACE(
"wnd=%p ht=0x%04x (%ld,%ld)\n", pWnd,
ht,
pt.x,
pt.y);
4547 if( wChar && wChar !=
' ' )
4550 if ( uItem >= (
UINT)(-2) )
4583 if (pti != pWnd->
head.pti)
4585 ERR(
"Must be the same pti!\n");
4589 TRACE(
"hmenu %p flags %04x (%d,%d) hwnd %p lpTpm %p \n",
4671 if (pPopupMenu ==
NULL)
4677 ((
PMENUWND)Wnd)->ppopupmenu = pPopupMenu;
4686 ERR(
"Wrong window class for Menu! fnid %x\n",Wnd->
fnid);
4689 pPopupMenu = ((
PMENUWND)Wnd)->ppopupmenu;
4741 ERR(
"No Window Pop Up!\n");
4763 ERR(
"Bad Menu Handle\n");
4771 pPopupMenu->
spmenu = pmenu;
4783 ERR(
"Someone is passing unknown menu messages %d\n",
Message);
4800 UINT uItem = uItemHilite;
4810 MenuItem->
fState &= ~MF_HILITE;
4812 if (MenuObject->
iItem == uItemHilite)
return TRUE;
4824 DWORD dwExStyle = 0;
4833 dwStyle = pWindowObject->
style;
4834 dwExStyle = pWindowObject->
ExStyle;
5033 PMENU menu, pSubTarget;
5070 ERR(
"Validation of window station handle (%p) failed\n",
5076 if (Menu && Menu->
head.
rpdesk->rpwinstaParent != WinStaObject)
5078 ERR(
"Desktop Window Station does not match Process one!\n");
5265 ERR(
"Failed Item Lookup! %u\n", uItem);
5286 Rect->left += XMove;
5288 Rect->right += XMove;
5289 Rect->bottom += YMove;
5303 if (
NULL == hSysMenu)
5308 if (
NULL == SysMenu)
5360 if (NewMenu ==
NULL)
5394 ERR(
"failed to load system menu!\n");
5453 OldMenu->
fFlags &= ~MNF_SYSMENU;
5508 if (
NULL == NewMenu)
5510 if (
NULL != OldMenu)
5520 if (
NULL != OldMenu)
5531 if (
NULL != NewMenu)
5536 if (
NULL != OldMenu)
5582 Rect.left = leftBorder;
5608 TRACE(
"Enter NtUserCheckMenuItem\n");
5617 TRACE(
"Leave NtUserCheckMenuItem, ret=%lu\n", Ret);
5634 TRACE(
"Enter NtUserDeleteMenu\n");
5643 TRACE(
"Leave NtUserDeleteMenu, ret=%i\n", Ret);
5682 TRACE(
"Enter NtUserGetSystemMenu\n");
5698 TRACE(
"Leave NtUserGetSystemMenu, ret=%p\n", Ret);
5717 TRACE(
"Enter NtUserSetSystemMenu\n");
5741 TRACE(
"Leave NtUserSetSystemMenu, ret=%i\n",
Result);
5758 TRACE(
"Enter NtUserGetTitleBarInfo\n");
5804 TRACE(
"Leave NtUserGetTitleBarInfo, ret=%u\n", retValue);
5840 TRACE(
"Enter NtUserDestroyMenu\n");
5855 TRACE(
"Leave NtUserDestroyMenu, ret=%i\n", Ret);
5872 TRACE(
"Enter NtUserEnableMenuItem\n");
5881 TRACE(
"Leave NtUserEnableMenuItem, ret=%u\n", Ret);
5893 TRACE(
"Enter NtUserEndMenu\n");
5912 TRACE(
"Leave NtUserEndMenu\n");
5935 TRACE(
"Enter NtUserGetMenuBarInfo\n");
5959 WARN(
"called on invalid window: %u\n", pWnd->
pcls->
fnid);
5965 pPopupMenu = ((
PMENUWND)pWnd)->ppopupmenu;
5966 if (pPopupMenu && pPopupMenu->
spmenu)
5978 TRACE(
"GMBI: OBJID_MENU hMenu %p\n",hMenu);
6017 if ((idItem < 0) || ((
ULONG)idItem > Menu->
cItems))
6025 TRACE(
"idItem a 0 %d\n",Ret);
6030 TRACE(
"idItem b %d %d\n", idItem-1, Ret);
6071 TRACE(
"Leave NtUserGetMenuBarInfo, ret=%i\n", Ret);
6084 PMENU Menu, SubMenu;
6087 UINT Ret = 0xFFFFFFFF;
6089 TRACE(
"Enter NtUserGetMenuIndex\n");
6097 for (
i = 0;
i < Menu->
cItems;
i++, MenuItem++)
6101 Ret = MenuItem->
wID;
6107 TRACE(
"Leave NtUserGetMenuIndex, ret=%u\n", Ret);
6130 TRACE(
"Enter NtUserGetMenuItemRect\n");
6153 if (lprcItem ==
NULL)
6172 Rect.right += XMove;
6173 Rect.bottom += YMove;
6193 TRACE(
"Leave NtUserGetMenuItemRect, ret=%i\n", Ret);
6212 TRACE(
"Enter NtUserHiliteMenuItem\n");
6230 TRACE(
"Leave NtUserHiliteMenuItem, ret=%i\n", Ret);
6253 ERR(
"Enter NtUserDrawMenuBarTemp\n");
6288 ERR(
"Leave NtUserDrawMenuBarTemp, ret=%lu\n", Ret);
6309 TRACE(
"Enter NtUserMenuItemFromPoint\n");
6333 Rect.bottom =
mi->cyItem;
6346 TRACE(
"Leave NtUserMenuItemFromPoint, ret=%i\n", Ret);
6375 Rect.left = leftBorder;
6399 TRACE(
"Enter NtUserRemoveMenu\n");
6408 TRACE(
"Leave NtUserRemoveMenu, ret=%i\n", Ret);
6426 TRACE(
"Enter NtUserSetMenu\n");
6451 TRACE(
"Leave NtUserSetMenu, ret=%i\n", Ret);
6462 DWORD dwContextHelpId)
6467 TRACE(
"Enter NtUserSetMenuContextHelpId\n");
6476 TRACE(
"Leave NtUserSetMenuContextHelpId, ret=%i\n", Ret);
6493 TRACE(
"Enter NtUserSetMenuDefaultItem\n");
6502 TRACE(
"Leave NtUserSetMenuDefaultItem, ret=%i\n", Ret);
6517 TRACE(
"Enter NtUserSetMenuFlagRtoL\n");
6526 TRACE(
"Leave NtUserSetMenuFlagRtoL, ret=%i\n", Ret);
6542 TRACE(
"Enter NtUserThunkedMenuInfo\n");
6551 TRACE(
"Leave NtUserThunkedMenuInfo, ret=%i\n", Ret);
6573 TRACE(
"Enter NtUserThunkedMenuItemInfo\n");
6579 RtlInitEmptyUnicodeString(&lstrCaption,
NULL, 0);
6587 if (lpszCaption && lpszCaption->
Buffer)
6595 ERR(
"Failed to capture MenuItem Caption (status 0x%08x)\n",
Status);
6615 TRACE(
"Leave NtUserThunkedMenuItemInfo, ret=%i\n", Ret);
6638 TRACE(
"Enter NtUserTrackPopupMenuEx\n");
6643 ERR(
"TPME : Invalid Menu handle.\n");
6650 ERR(
"TPME : Invalid Window handle.\n");
6672 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[]
struct _MENUWND * PMENUWND
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
#define UserHMGetHandle(obj)
struct _THREADINFO * GetW32ThreadInfo(VOID)
#define MSQ_STATE_MENUOWNER
#define EXCEPTION_EXECUTE_HANDLER
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