import commctrl import fontdemo import win32ui from pywin.mfc import docview, window # derive from CMDIChild. This does much work for us. class SplitterFrame(window.MDIChildWnd): def __init__(self): # call base CreateFrame self.images = None window.MDIChildWnd.__init__(self) def OnCreateClient(self, cp, context): splitter = win32ui.CreateSplitter() doc = context.doc frame_rect = self.GetWindowRect() size = ((frame_rect[2] - frame_rect[0]), (frame_rect[3] - frame_rect[1]) // 2) sub_size = (size[0] // 2, size[1]) splitter.CreateStatic(self, 2, 1) self.v1 = win32ui.CreateEditView(doc) self.v2 = fontdemo.FontView(doc) # CListControl view self.v3 = win32ui.CreateListView(doc) sub_splitter = win32ui.CreateSplitter() # pass "splitter" so each view knows how to get to the others sub_splitter.CreateStatic(splitter, 1, 2) sub_splitter.CreateView(self.v1, 0, 0, (sub_size)) sub_splitter.CreateView(self.v2, 0, 1, (0, 0)) # size ignored. splitter.SetRowInfo(0, size[1], 0) splitter.CreateView(self.v3, 1, 0, (0, 0)) # size ignored. # Setup items in the imagelist self.images = win32ui.CreateImageList(32, 32, 1, 5, 5) self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_MAINFRAME)) self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_PYTHONCONTYPE)) self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_TEXTTYPE)) self.v3.SetImageList(self.images, commctrl.LVSIL_NORMAL) self.v3.InsertItem(0, "Icon 1", 0) self.v3.InsertItem(0, "Icon 2", 1) self.v3.InsertItem(0, "Icon 3", 2) # self.v3.Arrange(commctrl.LVA_DEFAULT) Hmmm - win95 aligns left always??? return 1 def OnDestroy(self, msg): window.MDIChildWnd.OnDestroy(self, msg) if self.images: self.images.DeleteImageList() self.images = None def InitialUpdateFrame(self, doc, makeVisible): self.v1.ReplaceSel("Hello from Edit Window 1") self.v1.SetModifiedFlag(0) class SampleTemplate(docview.DocTemplate): def __init__(self): docview.DocTemplate.__init__( self, win32ui.IDR_PYTHONTYPE, None, SplitterFrame, None ) def InitialUpdateFrame(self, frame, doc, makeVisible): # print "frame is ", frame, frame._obj_ # print "doc is ", doc, doc._obj_ self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler. frame.InitialUpdateFrame(doc, makeVisible) def demo(): template = SampleTemplate() doc = template.OpenDocumentFile(None) doc.SetTitle("Splitter Demo") if __name__ == "__main__": import demoutils if demoutils.NeedGoodGUI(): demo()