Spaces:
Sleeping
Sleeping
# 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() | |