123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # Demo of ToolBars
-
- # Shows the toolbar control.
- # Demos how to make custom tooltips, etc.
-
- import commctrl
- import win32api
- import win32con
- import win32ui
- from pywin.mfc import afxres, docview, window
-
-
- class GenericFrame(window.MDIChildWnd):
- def OnCreateClient(self, cp, context):
- # handlers for toolbar buttons
- self.HookCommand(self.OnPrevious, 401)
- self.HookCommand(self.OnNext, 402)
- # Its not necessary for us to hook both of these - the
- # common controls should fall-back all by themselves.
- # Indeed, given we hook TTN_NEEDTEXTW, commctrl.TTN_NEEDTEXTA
- # will not be called.
- self.HookNotify(self.GetTTText, commctrl.TTN_NEEDTEXT)
- self.HookNotify(self.GetTTText, commctrl.TTN_NEEDTEXTW)
-
- # parent = win32ui.GetMainFrame()
- parent = self
- style = (
- win32con.WS_CHILD
- | win32con.WS_VISIBLE
- | afxres.CBRS_SIZE_DYNAMIC
- | afxres.CBRS_TOP
- | afxres.CBRS_TOOLTIPS
- | afxres.CBRS_FLYBY
- )
-
- buttons = (win32ui.ID_APP_ABOUT, win32ui.ID_VIEW_INTERACTIVE)
- bitmap = win32ui.IDB_BROWSER_HIER
- tbid = 0xE840
- self.toolbar = tb = win32ui.CreateToolBar(parent, style, tbid)
- tb.LoadBitmap(bitmap)
- tb.SetButtons(buttons)
-
- tb.EnableDocking(afxres.CBRS_ALIGN_ANY)
- tb.SetWindowText("Test")
- parent.EnableDocking(afxres.CBRS_ALIGN_ANY)
- parent.DockControlBar(tb)
- parent.LoadBarState("ToolbarTest")
- window.MDIChildWnd.OnCreateClient(self, cp, context)
- return 1
-
- def OnDestroy(self, msg):
- self.SaveBarState("ToolbarTest")
-
- def GetTTText(self, std, extra):
- (hwndFrom, idFrom, code) = std
- text, hinst, flags = extra
- if flags & commctrl.TTF_IDISHWND:
- return # Not handled
- if idFrom == win32ui.ID_APP_ABOUT:
- # our 'extra' return value needs to be the following
- # entries from a NMTTDISPINFO[W] struct:
- # (szText, hinst, uFlags). None means 'don't change
- # the value'
- return 0, ("It works!", None, None)
- return None # not handled.
-
- def GetMessageString(self, id):
- if id == win32ui.ID_APP_ABOUT:
- return "Dialog Test\nTest"
- else:
- return self._obj_.GetMessageString(id)
-
- def OnSize(self, params):
- print("OnSize called with ", params)
-
- def OnNext(self, id, cmd):
- print("OnNext called")
-
- def OnPrevious(self, id, cmd):
- print("OnPrevious called")
-
-
- msg = """\
- This toolbar was dynamically created.\r
- \r
- The first item's tooltips is provided by Python code.\r
- \r
- (Dont close the window with the toolbar in a floating state - it may not re-appear!)\r
- """
-
-
- def test():
- template = docview.DocTemplate(
- win32ui.IDR_PYTHONTYPE, None, GenericFrame, docview.EditView
- )
- doc = template.OpenDocumentFile(None)
- doc.SetTitle("Toolbar Test")
- view = doc.GetFirstView()
- view.SetWindowText(msg)
-
-
- if __name__ == "__main__":
- import demoutils
-
- if demoutils.NeedGoodGUI():
- test()
|