我们从Python开源项目中,提取了以下11个代码示例,用于说明如何使用win32con.MF_BYPOSITION。
def SetToolsMenu(menu, menuPos = None): global tools global idPos # todo - check the menu does not already exist. # Create the new menu toolsMenu = win32ui.CreatePopupMenu() # Load from the ini file. items = LoadToolMenuItems() for menuString, cmd in items: tools[idPos] = (menuString, cmd, menuString) toolsMenu.AppendMenu(win32con.MF_ENABLED|win32con.MF_STRING,idPos, menuString) win32ui.GetMainFrame().HookCommand(HandleToolCommand, idPos) idPos=idPos+1 # Find the correct spot to insert the new tools menu. if menuPos is None: menuPos = menu.GetMenuItemCount()-2 if menuPos<0: menuPos=0 menu.InsertMenu(menuPos, win32con.MF_BYPOSITION|win32con.MF_ENABLED|win32con.MF_STRING|win32con.MF_POPUP, toolsMenu.GetHandle(), '&Tools')
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): s = LoadString(IDS_DISPLAY); win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_BYPOSITION, idCmdFirst + MENUVERB_DISPLAY, s); indexMenu += 1 # other verbs could go here... # indicate that we added one verb. return 1
def AddSystemReloadMenu(wnd): if not WndProcManage(wnd): return False hSysMenu = win32gui.GetSystemMenu(wnd.GetHandle(), False) if not hSysMenu: return False win32gui.InsertMenu(hSysMenu, 0, win32con.MF_BYPOSITION | win32con.MF_SEPARATOR, 0, '') win32gui.InsertMenu(hSysMenu, 0, win32con.MF_BYPOSITION, SYS_MENU_RELOAD_MODULES, 'Reload Modules') def HandleSystemMenu(wnd, msg, wparam, lparam): wnd.__class__._reload_modules() return False AddCallback(HandleSystemMenu, wnd, win32con.WM_SYSCOMMAND, SYS_MENU_RELOAD_MODULES, None) return True
def SetHelpMenuOtherHelp(mainMenu): """Modifies the main Help Menu to handle all registered help files. mainMenu -- The main menu to modify - usually from docTemplate.GetSharedMenu() """ # Load all help files from the registry. global helpIDMap if helpIDMap is None: helpIDMap = {} cmdID = win32ui.ID_HELP_OTHER excludeList = ['Main Python Documentation', 'Pythonwin Reference'] firstList = ListAllHelpFiles() # We actually want to not only exclude these entries, but # their help file names (as many entries may share the same name) excludeFnames = [] for desc, fname in firstList: if desc in excludeList: excludeFnames.append(fname) helpDescs = [] for desc, fname in firstList: if fname not in excludeFnames: helpIDMap[cmdID] = (desc, fname) win32ui.GetMainFrame().HookCommand(HandleHelpOtherCommand, cmdID) cmdID = cmdID + 1 helpMenu = mainMenu.GetSubMenu(mainMenu.GetMenuItemCount()-1) # Help menu always last. otherHelpMenuPos = 2 # cant search for ID, as sub-menu has no ID. otherMenu = helpMenu.GetSubMenu(otherHelpMenuPos) while otherMenu.GetMenuItemCount(): otherMenu.DeleteMenu(0, win32con.MF_BYPOSITION) if helpIDMap: for id, (desc, fname) in helpIDMap.iteritems(): otherMenu.AppendMenu(win32con.MF_ENABLED|win32con.MF_STRING,id, desc) else: helpMenu.EnableMenuItem(otherHelpMenuPos, win32con.MF_BYPOSITION | win32con.MF_GRAYED)
def SetHelpMenuOtherHelp(mainMenu): """Modifies the main Help Menu to handle all registered help files. mainMenu -- The main menu to modify - usually from docTemplate.GetSharedMenu() """ # Load all help files from the registry. global helpIDMap if helpIDMap is None: helpIDMap = {} cmdID = win32ui.ID_HELP_OTHER excludeList = ['Main Python Documentation', 'Pythonwin Reference'] firstList = ListAllHelpFiles() # We actually want to not only exclude these entries, but # their help file names (as many entries may share the same name) excludeFnames = [] for desc, fname in firstList: if desc in excludeList: excludeFnames.append(fname) helpDescs = [] for desc, fname in firstList: if fname not in excludeFnames: helpIDMap[cmdID] = (desc, fname) win32ui.GetMainFrame().HookCommand(HandleHelpOtherCommand, cmdID) cmdID = cmdID + 1 helpMenu = mainMenu.GetSubMenu(mainMenu.GetMenuItemCount()-1) # Help menu always last. otherHelpMenuPos = 2 # cant search for ID, as sub-menu has no ID. otherMenu = helpMenu.GetSubMenu(otherHelpMenuPos) while otherMenu.GetMenuItemCount(): otherMenu.DeleteMenu(0, win32con.MF_BYPOSITION) if helpIDMap: for id, (desc, fname) in helpIDMap.items(): otherMenu.AppendMenu(win32con.MF_ENABLED|win32con.MF_STRING,id, desc) else: helpMenu.EnableMenuItem(otherHelpMenuPos, win32con.MF_BYPOSITION | win32con.MF_GRAYED)
def getMenuInfo(hMenu, uIDItem): '''Get various info about a menu item. Arguments: hMenu The menu in which the item is to be found. uIDItem The item's index Returns: Menu item information object. This object is basically a 'bunch' (see http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52308). It will have useful attributes: name, itemCount, submenu, isChecked, isDisabled, isGreyed, and isSeperator Raises: WinGuiAutoError When the requested menu option isn't found. Usage example: submenuInfo = getMenuInfo(hMenu, submenu) hMenu, hMenuItemCount = submenuInfo.submenu, submenuInfo.itemCount''' # An object to hold the menu info class MenuInfo(Bunch): pass menuInfo = MenuInfo() # Menu state menuState = ctypes.windll.user32.GetMenuState(hMenu, uIDItem, win32con.MF_BYPOSITION) if menuState == -1: raise WinGuiAutoError("No such menu item, hMenu=" + str(hMenu) + " uIDItem=" + str(uIDItem)) menuInfo.isChecked = bool(menuState & win32con.MF_CHECKED) menuInfo.isDisabled = bool(menuState & win32con.MF_DISABLED) menuInfo.isGreyed = bool(menuState & win32con.MF_GRAYED) menuInfo.isSeperator = bool(menuState & win32con.MF_SEPARATOR) # ... there are more, but these are the ones I'm interested in # Menu name menuName = ctypes.c_buffer("\000" * 32) ctypes.windll.user32.GetMenuStringA(ctypes.c_int(hMenu), ctypes.c_int(uIDItem), menuName, ctypes.c_int(len(menuName)), win32con.MF_BYPOSITION) menuInfo.name = menuName.value # Sub menu info menuInfo.itemCount = menuState >> 8 if bool(menuState & win32con.MF_POPUP): menuInfo.submenu = ctypes.windll.user32.GetSubMenu(hMenu, uIDItem) else: menuInfo.submenu = None return menuInfo
def getMenuInfo(hMenu, uIDItem): #print "getMenuInfo fuction,hMenu,uIDItem",hMenu,uIDItem '''Get various info about a menu item. Arguments: hMenu The menu in which the item is to be found. uIDItem The item's index Returns: Menu item information object. This object is basically a 'bunch' (see http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52308). It will have useful attributes: name, itemCount, submenu, isChecked, isDisabled, isGreyed, and isSeperator Raises: WinGuiAutoError When the requested menu option isn't found. Usage example: submenuInfo = getMenuInfo(hMenu, submenu) hMenu, hMenuItemCount = submenuInfo.submenu, submenuInfo.itemCount''' # An object to hold the menu info class MenuInfo(Bunch): pass menuInfo = MenuInfo() # Menu state menuState = ctypes.windll.user32.GetMenuState(hMenu, uIDItem, win32con.MF_BYPOSITION) #print "menuState_MF_BYPOSITION:",ctypes.windll.user32.GetMenuState(hMenu,uIDItem,win32con.MF_BYPOSITION) #print "menuState_MF_BYCOMMAND:",ctypes.windll.user32.GetMenuState(hMenu,uIDItem,win32con.MF_BYCOMMAND) if menuState == -1: raise WinGuiAutoError("No such menu item, hMenu=" + str(hMenu) + " uIDItem=" + str(uIDItem)) menuInfo.isChecked = bool(menuState & win32con.MF_CHECKED) menuInfo.isDisabled = bool(menuState & win32con.MF_DISABLED) menuInfo.isGreyed = bool(menuState & win32con.MF_GRAYED) menuInfo.isSeperator = bool(menuState & win32con.MF_SEPARATOR) # ... there are more, but these are the ones I'm interested in # Menu name menuName = ctypes.c_buffer("\000" * 32) ctypes.windll.user32.GetMenuStringA(ctypes.c_int(hMenu), ctypes.c_int(uIDItem), menuName, ctypes.c_int(len(menuName)), win32con.MF_BYPOSITION) menuInfo.name = menuName.value # Sub menu info menuInfo.itemCount = menuState >> 8 if bool(menuState & win32con.MF_POPUP): menuInfo.submenu = ctypes.windll.user32.GetSubMenu(hMenu, uIDItem) else: menuInfo.submenu = None #print "menuInfo",menuInfo return menuInfo