# Demo of Generic document windows, DC, and Font usage # by Dave Brennan (brennan@hal.com) # usage examples: # >>> from fontdemo import * # >>> d = FontDemo('Hello, Python') # >>> f1 = { 'name':'Arial', 'height':36, 'weight':win32con.FW_BOLD} # >>> d.SetFont(f1) # >>> f2 = {'name':'Courier New', 'height':24, 'italic':1} # >>> d.SetFont (f2) import win32api import win32con import win32ui from pywin.mfc import docview # font is a dictionary in which the following elements matter: # (the best matching font to supplied parameters is returned) # name string name of the font as known by Windows # size point size of font in logical units # weight weight of font (win32con.FW_NORMAL, win32con.FW_BOLD) # italic boolean; true if set to anything but None # underline boolean; true if set to anything but None class FontView(docview.ScrollView): def __init__( self, doc, text="Python Rules!", font_spec={"name": "Arial", "height": 42} ): docview.ScrollView.__init__(self, doc) self.font = win32ui.CreateFont(font_spec) self.text = text self.width = self.height = 0 # set up message handlers self.HookMessage(self.OnSize, win32con.WM_SIZE) def OnAttachedObjectDeath(self): docview.ScrollView.OnAttachedObjectDeath(self) del self.font def SetFont(self, new_font): # Change font on the fly self.font = win32ui.CreateFont(new_font) # redraw the entire client window selfInvalidateRect(None) def OnSize(self, params): lParam = params[3] self.width = win32api.LOWORD(lParam) self.height = win32api.HIWORD(lParam) def OnPrepareDC(self, dc, printinfo): # Set up the DC for forthcoming OnDraw call self.SetScrollSizes(win32con.MM_TEXT, (100, 100)) dc.SetTextColor(win32api.RGB(0, 0, 255)) dc.SetBkColor(win32api.GetSysColor(win32con.COLOR_WINDOW)) dc.SelectObject(self.font) dc.SetTextAlign(win32con.TA_CENTER | win32con.TA_BASELINE) def OnDraw(self, dc): if self.width == 0 and self.height == 0: left, top, right, bottom = self.GetClientRect() self.width = right - left self.height = bottom - top x, y = self.width // 2, self.height // 2 dc.TextOut(x, y, self.text) def FontDemo(): # create doc/view template = docview.DocTemplate(win32ui.IDR_PYTHONTYPE, None, None, FontView) doc = template.OpenDocumentFile(None) doc.SetTitle("Font Demo") # print "template is ", template, "obj is", template._obj_ template.close() # print "closed" # del template if __name__ == "__main__": import demoutils if demoutils.NeedGoodGUI(): FontDemo()