|
用win32gui做了一个托盘程序,如何动态增加菜单条?
def __init__(self,
icon,
hover_text,
#menu_opti**,
#flag_restart,
on_quit=None,
default_menu_index=None,
window_class_name=None,):
#global lpsz_ClassName
self.icon = icon
self.hover_text = hover_text
self.on_quit = on_quit
self.StrClip=[]
self._next_action_id = FIRST_ID
self.StrClip=file2lst('string2Clipboard.txt')
self.menu_acti**_by_id = set()
self.init_menu() #在这儿增加
self.default_menu_index = (default_menu_index or 0)
self.window_class_name = window_class_name or "SysTrayIconPy"
message_map = {win32gui.RegisterWindowMessage("TaskbarCreated"): self.restart,
win32con.WM_DESTROY: self.destroy,
win32con.WM_COMMAND: self.command,
win32con.WM_USER+20 : self.notify,}
# Register the Window class.
window_class = win32gui.WNDCLASS()
hinst = window_class.hInstance = win32gui.GetModuleHandle(None)
window_class.lpszClassName = self.window_class_name
window_class.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;
window_class.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
window_class.hbrBackground = win32con.COLOR_WINDOW
window_class.lpfnWndProc = message_map # could also specify a wndproc.
#if flag_restart:
# win32gui.UnregisterClass(lpsz_ClassName,None) #######debug
classAtom = win32gui.RegisterClass(window_class)
#lpsz_ClassName =classAtom
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = win32gui.CreateWindow(classAtom,
self.window_class_name,
style,
0,
0,
win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT,
0,
0,
hinst,
None)
win32gui.UpdateWindow(self.hwnd)
self.notify_id = None
self.refresh_icon()
win32gui.PumpMessages()
程序运行没有问题,但是在菜单中仅仅调用self.init_menu()增加菜单没有作用,可能还需要再注册 win32gui.RegisterClass(window_class),但是总是失败,请高人指教!
|
|