void createMenus(LPPOINT p,HWND hWnd,CNeuron * cn) { HMENU hPopupMenu = CreatePopupMenu(); InsertMenuA(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_POPUP_EXIT, (LPCSTR)cn->getName().c_str()); SetForegroundWindow(hWnd); TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, p->x, p->y, 0, hWnd, NULL); }
static bool LuaGuiInsertMenu(void *hMenu, uint32_t position, uint32_t flag, UINT_PTR newItemId, const char *newItemName) { return !! InsertMenuA( reinterpret_cast<HMENU>(hMenu), position, flag, newItemId, newItemName); }
BOOL InsertMenuUTF8(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR str) { if (!(uFlags&(MF_BITMAP|MF_SEPARATOR)) && str && WDL_HasUTF8(str) AND_IS_NOT_WIN9X) { MBTOWIDE(wbuf,str); if (wbuf_ok) { BOOL rv=InsertMenuW(hMenu,uPosition,uFlags,uIDNewItem,wbuf); MBTOWIDE_FREE(wbuf); return rv; } } return InsertMenuA(hMenu,uPosition,uFlags,uIDNewItem,str); }
BOOL InsertMenuUTF8(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR str) { if (str && WDL_HasUTF8(str) && GetVersion()<0x80000000) { MBTOWIDE(wbuf,str); if (wbuf_ok) { BOOL rv=InsertMenuW(hMenu,uPosition,uFlags,uIDNewItem,wbuf); MBTOWIDE_FREE(wbuf); return rv; } } return InsertMenuA(hMenu,uPosition,uFlags,uIDNewItem,str); }
HMENU buildSkinsMenu(void) { BOOL ok; hMenuExtended = CreateMenu(); hMenuExtendedSub = CreateMenu(); /* Create Life cycle menu list */ ok = InsertMenuA(hMenuExtendedSub, 0, MF_BYPOSITION, EXMENU_ITEM_SHUTDOWN, EXMENU_TEXT_SHUTDOWN); ok = InsertMenuA(hMenuExtendedSub, 0, MF_BYPOSITION, EXMENU_ITEM_RESUME, EXMENU_TEXT_RESUME); ok = InsertMenuA(hMenuExtendedSub, 0, MF_BYPOSITION, EXMENU_ITEM_PAUSE, EXMENU_TEXT_PAUSE); /* Add Life Cycle menu */ ok = InsertMenuA(hMenuExtended, 0, MF_BYPOSITION | MF_POPUP, (UINT) hMenuExtendedSub, EXMENU_TEXT_MAIN); (void) ok; return hMenuExtended; }
/************************************************************************* * Shell_MergeMenus [SHELL32.67] */ HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags) { int nItem; HMENU hmSubMenu; BOOL bAlreadySeparated; MENUITEMINFOW miiSrc; WCHAR szName[256]; UINT uTemp, uIDMax = uIDAdjust; TRACE("hmenu1=%p hmenu2=%p 0x%04x 0x%04x 0x%04x 0x%04x\n", hmDst, hmSrc, uInsert, uIDAdjust, uIDAdjustMax, uFlags); if (!hmDst || !hmSrc) { return uIDMax; } nItem = GetMenuItemCount(hmDst); if (uInsert >= (UINT)nItem) /* insert position inside menu? */ { uInsert = (UINT)nItem; /* append on the end */ bAlreadySeparated = TRUE; } else { bAlreadySeparated = _SHIsMenuSeparator(hmDst, uInsert); } if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated) { /* Add a separator between the menus */ InsertMenuA(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); bAlreadySeparated = TRUE; } /* Go through the menu items and clone them*/ for (nItem = GetMenuItemCount(hmSrc) - 1; nItem >= 0; nItem--) { miiSrc.cbSize = sizeof(MENUITEMINFOW); miiSrc.fMask = MIIM_STATE | MIIM_ID | MIIM_SUBMENU | MIIM_CHECKMARKS | MIIM_TYPE | MIIM_DATA; /* We need to reset this every time through the loop in case menus DON'T have IDs*/ miiSrc.fType = MFT_STRING; miiSrc.dwTypeData = szName; miiSrc.dwItemData = 0; miiSrc.cch = sizeof(szName)/sizeof(WCHAR); if (!GetMenuItemInfoW(hmSrc, nItem, TRUE, &miiSrc)) { continue; } /* TRACE("found menu=0x%04x %s id=0x%04x mask=0x%08x smenu=0x%04x\n", hmSrc, debugstr_a(miiSrc.dwTypeData), miiSrc.wID, miiSrc.fMask, miiSrc.hSubMenu); */ if (miiSrc.fType & MFT_SEPARATOR) { /* This is a separator; don't put two of them in a row */ if (bAlreadySeparated) continue; bAlreadySeparated = TRUE; } else if (miiSrc.hSubMenu) { if (uFlags & MM_SUBMENUSHAVEIDS) { miiSrc.wID += uIDAdjust; /* add uIDAdjust to the ID */ if (miiSrc.wID > uIDAdjustMax) /* skip ID's higher uIDAdjustMax */ continue; if (uIDMax <= miiSrc.wID) /* remember the highest ID */ uIDMax = miiSrc.wID + 1; } else { miiSrc.fMask &= ~MIIM_ID; /* Don't set IDs for submenus that didn't have them already */ } hmSubMenu = miiSrc.hSubMenu; miiSrc.hSubMenu = CreatePopupMenu(); if (!miiSrc.hSubMenu) return(uIDMax); uTemp = Shell_MergeMenus(miiSrc.hSubMenu, hmSubMenu, 0, uIDAdjust, uIDAdjustMax, uFlags & MM_SUBMENUSHAVEIDS); if (uIDMax <= uTemp) uIDMax = uTemp; bAlreadySeparated = FALSE; } else /* normal menu item */ { miiSrc.wID += uIDAdjust; /* add uIDAdjust to the ID */ if (miiSrc.wID > uIDAdjustMax) /* skip ID's higher uIDAdjustMax */ continue; if (uIDMax <= miiSrc.wID) /* remember the highest ID */ uIDMax = miiSrc.wID + 1; bAlreadySeparated = FALSE; } /* TRACE("inserting menu=0x%04x %s id=0x%04x mask=0x%08x smenu=0x%04x\n", hmDst, debugstr_a(miiSrc.dwTypeData), miiSrc.wID, miiSrc.fMask, miiSrc.hSubMenu); */ if (!InsertMenuItemW(hmDst, uInsert, TRUE, &miiSrc)) { return(uIDMax); } } /* Ensure the correct number of separators at the beginning of the inserted menu items*/ if (uInsert == 0) { if (bAlreadySeparated) { DeleteMenu(hmDst, uInsert, MF_BYPOSITION); } } else { if (_SHIsMenuSeparator(hmDst, uInsert-1)) { if (bAlreadySeparated) { DeleteMenu(hmDst, uInsert, MF_BYPOSITION); } } else { if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated) { /* Add a separator between the menus*/ InsertMenuW(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); } } } return(uIDMax); }