1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # 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()
|