1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- # A demo of the win32rcparser module and using win32gui
- import win32gui
- import win32api
- import win32con
- import win32rcparser
- import commctrl
- import sys, os
- this_dir = os.path.abspath(os.path.dirname(__file__))
- g_rcname = os.path.abspath(
- os.path.join( this_dir, "..", "test", "win32rcparser", "test.rc"))
- if not os.path.isfile(g_rcname):
- raise RuntimeError("Can't locate test.rc (should be at '%s')" % (g_rcname,))
- class DemoWindow:
- def __init__(self, dlg_template):
- self.dlg_template = dlg_template
- def CreateWindow(self):
- self._DoCreate(win32gui.CreateDialogIndirect)
- def DoModal(self):
- return self._DoCreate(win32gui.DialogBoxIndirect)
- def _DoCreate(self, fn):
- message_map = {
- win32con.WM_INITDIALOG: self.OnInitDialog,
- win32con.WM_CLOSE: self.OnClose,
- win32con.WM_DESTROY: self.OnDestroy,
- win32con.WM_COMMAND: self.OnCommand,
- }
- return fn(0, self.dlg_template, 0, message_map)
- def OnInitDialog(self, hwnd, msg, wparam, lparam):
- self.hwnd = hwnd
- # centre the dialog
- desktop = win32gui.GetDesktopWindow()
- l,t,r,b = win32gui.GetWindowRect(self.hwnd)
- dt_l, dt_t, dt_r, dt_b = win32gui.GetWindowRect(desktop)
- centre_x, centre_y = win32gui.ClientToScreen( desktop, ( (dt_r-dt_l)//2, (dt_b-dt_t)//2) )
- win32gui.MoveWindow(hwnd, centre_x-(r//2), centre_y-(b//2), r-l, b-t, 0)
- def OnCommand(self, hwnd, msg, wparam, lparam):
- # Needed to make OK/Cancel work - no other controls are handled.
- id = win32api.LOWORD(wparam)
- if id in [win32con.IDOK, win32con.IDCANCEL]:
- win32gui.EndDialog(hwnd, id)
- def OnClose(self, hwnd, msg, wparam, lparam):
- win32gui.EndDialog(hwnd, 0)
- def OnDestroy(self, hwnd, msg, wparam, lparam):
- pass
- def DemoModal():
- # Load the .rc file.
- resources = win32rcparser.Parse(g_rcname)
- for id, ddef in resources.dialogs.items():
- print("Displaying dialog", id)
- w=DemoWindow(ddef)
- w.DoModal()
- if __name__=='__main__':
- flags = 0
- for flag in """ICC_DATE_CLASSES ICC_ANIMATE_CLASS ICC_ANIMATE_CLASS
- ICC_BAR_CLASSES ICC_COOL_CLASSES ICC_DATE_CLASSES
- ICC_HOTKEY_CLASS ICC_INTERNET_CLASSES ICC_LISTVIEW_CLASSES
- ICC_PAGESCROLLER_CLASS ICC_PROGRESS_CLASS ICC_TAB_CLASSES
- ICC_TREEVIEW_CLASSES ICC_UPDOWN_CLASS ICC_USEREX_CLASSES
- ICC_WIN95_CLASSES """.split():
- flags |= getattr(commctrl, flag)
- win32gui.InitCommonControlsEx(flags)
- # Need to do this go get rich-edit working.
- win32api.LoadLibrary("riched20.dll")
- DemoModal()
|