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)
3323 TRACE(
"owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
3325 if (!Menu)
return Menu;
3424 if(
Flags & TPM_LAYOUTRTL)
3433 if(
Flags & TPM_LAYOUTRTL)
3445 Flags &= (~TPM_VERTICAL);
3460 return Item->spSubMenu;
3477 TRACE(
"%p menu=%p\n", pmt, Menu);
3488 if (!(
Item->spSubMenu))
3530 TRACE(
"%x menu=%x 0x%04x\n", pmt, PtMenu,
Index);
3532 if ( pmt->
TopMenu != PtMenu &&
3555 TRACE(
"%x PtMenu=%p\n", pmt, PtMenu);
3574 if (PtMenu->
iItem !=
id)
3600 TRACE(
"%p pmenu=%x\n", pmt, PtMenu);
3619 if (!(
item->spSubMenu))
3622 if (ExecutedMenuId == -1 || ExecutedMenuId == -2)
return -1;
3623 return ExecutedMenuId;
3652 if (!menu)
return NULL;
3658 if ( pItem ) pItem = &pItem[menu->
iItem];
3720 return item->spSubMenu;
3746 while (i < pmt->TopMenu->cItems) {
3779 TRACE(
"%p [%p] -> %p [%p]\n",
3809 else hNewMenu =
NULL;
3832 WARN(
" -- got confused.\n");
3916 PMENU MenuPrev, MenuTmp;
3918 MenuPrev = MenuTmp = pmt->
TopMenu;
3943 PMENU MenuTmp, MenuPrev;
3946 MenuPrev = MenuTmp = pmt->
TopMenu;
3994 TRACE(
"MenuKeyRight called, cur %p, top %p.\n",
4011 TRACE(
"Going to %d.\n", NextCol);
4050 INT executedMenuId = -1;
4059 if (pti != pwnd->
head.pti)
4061 ERR(
"Not the same PTI!!!!\n");
4071 TRACE(
"MTM : hmenu=%p flags=0x%08x (%d,%d) hwnd=%x\n",
4127 enterIdleSent =
TRUE;
4152 enterIdleSent=
FALSE;
4217 fRemove = (executedMenuId != -1);
4307 if (
msg.wParam ==
L'\r' ||
msg.wParam ==
L' ')
4310 fEndMenu = (executedMenuId != -2);
4317 if (
msg.wParam < 32)
break;
4327 fEndMenu = (executedMenuId != -2);
4392 if (executedMenuId == -1) executedMenuId = 0;
4393 return executedMenuId;
4486 TRACE(
"wnd=%p ht=0x%04x (%ld,%ld)\n", pWnd,
ht,
pt.x,
pt.y);
4542 if( wChar && wChar !=
' ' )
4545 if ( uItem >= (
UINT)(-2) )
4578 if (pti != pWnd->
head.pti)
4580 ERR(
"Must be the same pti!\n");
4584 TRACE(
"hmenu %p flags %04x (%d,%d) hwnd %p lpTpm %p \n",
4666 if (pPopupMenu ==
NULL)
4672 ((
PMENUWND)Wnd)->ppopupmenu = pPopupMenu;
4681 ERR(
"Wrong window class for Menu! fnid %x\n",Wnd->
fnid);
4684 pPopupMenu = ((
PMENUWND)Wnd)->ppopupmenu;
4736 ERR(
"No Window Pop Up!\n");
4758 ERR(
"Bad Menu Handle\n");
4766 pPopupMenu->
spmenu = pmenu;
4778 ERR(
"Someone is passing unknown menu messages %d\n",
Message);
4795 UINT uItem = uItemHilite;
4805 MenuItem->
fState &= ~MF_HILITE;
4807 if (MenuObject->
iItem == uItemHilite)
return TRUE;
4819 DWORD dwExStyle = 0;
4828 dwStyle = pWindowObject->
style;
4829 dwExStyle = pWindowObject->
ExStyle;
5028 PMENU menu, pSubTarget;
5065 ERR(
"Validation of window station handle (%p) failed\n",
5071 if (Menu && Menu->
head.
rpdesk->rpwinstaParent != WinStaObject)
5073 ERR(
"Desktop Window Station does not match Process one!\n");
5260 ERR(
"Failed Item Lookup! %u\n", uItem);
5281 Rect->left += XMove;
5283 Rect->right += XMove;
5284 Rect->bottom += YMove;
5298 if (
NULL == hSysMenu)
5303 if (
NULL == SysMenu)
5355 if (NewMenu ==
NULL)
5389 ERR(
"failed to load system menu!\n");
5448 OldMenu->
fFlags &= ~MNF_SYSMENU;
5503 if (
NULL == NewMenu)
5505 if (
NULL != OldMenu)
5515 if (
NULL != OldMenu)
5526 if (
NULL != NewMenu)
5531 if (
NULL != OldMenu)
5577 Rect.left = leftBorder;
5603 TRACE(
"Enter NtUserCheckMenuItem\n");
5612 TRACE(
"Leave NtUserCheckMenuItem, ret=%lu\n", Ret);
5629 TRACE(
"Enter NtUserDeleteMenu\n");
5638 TRACE(
"Leave NtUserDeleteMenu, ret=%i\n", Ret);
5677 TRACE(
"Enter NtUserGetSystemMenu\n");
5693 TRACE(
"Leave NtUserGetSystemMenu, ret=%p\n", Ret);
5712 TRACE(
"Enter NtUserSetSystemMenu\n");
5736 TRACE(
"Leave NtUserSetSystemMenu, ret=%i\n",
Result);
5753 TRACE(
"Enter NtUserGetTitleBarInfo\n");
5799 TRACE(
"Leave NtUserGetTitleBarInfo, ret=%u\n", retValue);
5835 TRACE(
"Enter NtUserDestroyMenu\n");
5850 TRACE(
"Leave NtUserDestroyMenu, ret=%i\n", Ret);
5867 TRACE(
"Enter NtUserEnableMenuItem\n");
5876 TRACE(
"Leave NtUserEnableMenuItem, ret=%u\n", Ret);
5888 TRACE(
"Enter NtUserEndMenu\n");
5907 TRACE(
"Leave NtUserEndMenu\n");
5930 TRACE(
"Enter NtUserGetMenuBarInfo\n");
5954 WARN(
"called on invalid window: %u\n", pWnd->
pcls->
fnid);
5960 pPopupMenu = ((
PMENUWND)pWnd)->ppopupmenu;
5961 if (pPopupMenu && pPopupMenu->
spmenu)
5973 TRACE(
"GMBI: OBJID_MENU hMenu %p\n",hMenu);
6012 if ((idItem < 0) || ((
ULONG)idItem > Menu->
cItems))
6020 TRACE(
"idItem a 0 %d\n",Ret);
6025 TRACE(
"idItem b %d %d\n", idItem-1, Ret);
6066 TRACE(
"Leave NtUserGetMenuBarInfo, ret=%i\n", Ret);
6079 PMENU Menu, SubMenu;
6082 UINT Ret = 0xFFFFFFFF;
6084 TRACE(
"Enter NtUserGetMenuIndex\n");
6092 for (
i = 0;
i < Menu->
cItems;
i++, MenuItem++)
6096 Ret = MenuItem->
wID;
6102 TRACE(
"Leave NtUserGetMenuIndex, ret=%u\n", Ret);
6125 TRACE(
"Enter NtUserGetMenuItemRect\n");
6148 if (lprcItem ==
NULL)
6167 Rect.right += XMove;
6168 Rect.bottom += YMove;
6188 TRACE(
"Leave NtUserGetMenuItemRect, ret=%i\n", Ret);
6207 TRACE(
"Enter NtUserHiliteMenuItem\n");
6225 TRACE(
"Leave NtUserHiliteMenuItem, ret=%i\n", Ret);
6248 ERR(
"Enter NtUserDrawMenuBarTemp\n");
6283 ERR(
"Leave NtUserDrawMenuBarTemp, ret=%lu\n", Ret);
6304 TRACE(
"Enter NtUserMenuItemFromPoint\n");
6328 Rect.bottom =
mi->cyItem;
6341 TRACE(
"Leave NtUserMenuItemFromPoint, ret=%i\n", Ret);
6370 Rect.left = leftBorder;
6394 TRACE(
"Enter NtUserRemoveMenu\n");
6403 TRACE(
"Leave NtUserRemoveMenu, ret=%i\n", Ret);
6421 TRACE(
"Enter NtUserSetMenu\n");
6446 TRACE(
"Leave NtUserSetMenu, ret=%i\n", Ret);
6457 DWORD dwContextHelpId)
6462 TRACE(
"Enter NtUserSetMenuContextHelpId\n");
6471 TRACE(
"Leave NtUserSetMenuContextHelpId, ret=%i\n", Ret);
6488 TRACE(
"Enter NtUserSetMenuDefaultItem\n");
6497 TRACE(
"Leave NtUserSetMenuDefaultItem, ret=%i\n", Ret);
6512 TRACE(
"Enter NtUserSetMenuFlagRtoL\n");
6521 TRACE(
"Leave NtUserSetMenuFlagRtoL, ret=%i\n", Ret);
6537 TRACE(
"Enter NtUserThunkedMenuInfo\n");
6546 TRACE(
"Leave NtUserThunkedMenuInfo, ret=%i\n", Ret);
6568 TRACE(
"Enter NtUserThunkedMenuItemInfo\n");
6574 RtlInitEmptyUnicodeString(&lstrCaption,
NULL, 0);
6582 if (lpszCaption && lpszCaption->
Buffer)
6590 ERR(
"Failed to capture MenuItem Caption (status 0x%08x)\n",
Status);
6610 TRACE(
"Leave NtUserThunkedMenuItemInfo, ret=%i\n", Ret);
6633 TRACE(
"Enter NtUserTrackPopupMenuEx\n");
6638 ERR(
"TPME : Invalid Menu handle.\n");
6645 ERR(
"TPME : Invalid Window handle.\n");
6667 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