74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
# A demo which creates a view and a frame which displays a PPM format bitmap
|
|
#
|
|
# This hasnnt been run in a while, as I dont have many of that format around!
|
|
|
|
import win32api
|
|
import win32con
|
|
import win32ui
|
|
|
|
|
|
class DIBView:
|
|
def __init__(self, doc, dib):
|
|
self.dib = dib
|
|
self.view = win32ui.CreateView(doc)
|
|
self.width = self.height = 0
|
|
# set up message handlers
|
|
# self.view.OnPrepareDC = self.OnPrepareDC
|
|
self.view.HookMessage(self.OnSize, win32con.WM_SIZE)
|
|
|
|
def OnSize(self, params):
|
|
lParam = params[3]
|
|
self.width = win32api.LOWORD(lParam)
|
|
self.height = win32api.HIWORD(lParam)
|
|
|
|
def OnDraw(self, ob, dc):
|
|
# set sizes used for "non strecth" mode.
|
|
self.view.SetScrollSizes(win32con.MM_TEXT, self.dib.GetSize())
|
|
dibSize = self.dib.GetSize()
|
|
dibRect = (0, 0, dibSize[0], dibSize[1])
|
|
# stretch BMP.
|
|
# self.dib.Paint(dc, (0,0,self.width, self.height),dibRect)
|
|
# non stretch.
|
|
self.dib.Paint(dc)
|
|
|
|
|
|
class DIBDemo:
|
|
def __init__(self, filename, *bPBM):
|
|
# init data members
|
|
f = open(filename, "rb")
|
|
dib = win32ui.CreateDIBitmap()
|
|
if len(bPBM) > 0:
|
|
magic = f.readline()
|
|
if magic != "P6\n":
|
|
print("The file is not a PBM format file")
|
|
raise ValueError("Failed - The file is not a PBM format file")
|
|
# check magic?
|
|
rowcollist = f.readline().split()
|
|
cols = int(rowcollist[0])
|
|
rows = int(rowcollist[1])
|
|
f.readline() # whats this one?
|
|
dib.LoadPBMData(f, (cols, rows))
|
|
else:
|
|
dib.LoadWindowsFormatFile(f)
|
|
f.close()
|
|
# create doc/view
|
|
self.doc = win32ui.CreateDoc()
|
|
self.dibView = DIBView(self.doc, dib)
|
|
self.frame = win32ui.CreateMDIFrame()
|
|
self.frame.LoadFrame() # this will force OnCreateClient
|
|
self.doc.SetTitle("DIB Demo")
|
|
self.frame.ShowWindow()
|
|
|
|
# display the sucka
|
|
self.frame.ActivateFrame()
|
|
|
|
def OnCreateClient(self, createparams, context):
|
|
self.dibView.view.CreateWindow(self.frame)
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import demoutils
|
|
|
|
demoutils.NotAScript()
|