94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
|
# Demo of ToolBars
|
||
|
|
||
|
# Shows the toolbar control.
|
||
|
# Demos how to make custom tooltips, etc.
|
||
|
|
||
|
import win32ui
|
||
|
import win32con
|
||
|
import win32api
|
||
|
from pywin.mfc import docview, window, afxres
|
||
|
import commctrl
|
||
|
|
||
|
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()
|