Hi,
I currently try to add a matplotlib backend based on the Gecko engine
(XPCOM, plugin), PIL and pywin.
I don't use a child window and draw directly in the plugin window.
My flicker problem of the plugin area is resolved.
But when I resize the window (when the dimensions are increased) the
buttons of the parent window flicker (the window which embeds the plugin).
I think, there is something to do with the WM_NCPAINT event (fired when
the window is enlarged) but I don't see what.
Can anybody help me ?
thanks a lot.
Cyril.
The wndproc procedure is :
def wndProc(self, hwnd, message, wParam, lParam):
if message == win32con.WM_PAINT:
print "Hello PAINT"
fig = self.canvas.figure
dpival = fig.dpi.get()
winch = self.width/dpival
hinch = self.height/dpival
fig.set_figsize_inches(winch, hinch)
hdc, paintStruct = win32gui.BeginPaint(hwnd)
self.canvas.draw()
image = Image.frombuffer('RGBA', self.canvas.get_width_height(),
self.canvas.buffer_rgba(0,0))
image = image.transpose(Image.FLIP_TOP_BOTTOM)
dib = ImageWin.Dib(image)
z = ImageWin.HWND(hwnd)
dib.expose(z)
win32gui.EndPaint(hwnd, paintStruct)
return 0
elif message == win32con.WM_MOUSEACTIVATE:
print "Hello MOUSEACTIVATE"
return 1
elif message == win32con.WM_NCPAINT:
print "Hello NCPAINT"
return win32gui.DefWindowProc(hwnd, message, wParam, lParam)
elif message == win32con.WM_ERASEBKGND:
print "Hello ERASEBKGND"
return 1
elif message == win32con.WM_SIZE:
print "Hello SIZE"
return 0
elif message == win32con.WM_LBUTTONDOWN:
print "Hello LBUTTONDOWN "
self.start = win32gui.ScreenToClient(hwnd, win32gui.GetCursorPos())
return 1
elif message == win32con.WM_MOUSEMOVE:
print "Hello MOVE "
win = win32ui.CreateWindowFromHandle(hwnd)
win32gui.UpdateWindow(hwnd)
if self.start:
image = Image.frombuffer('RGBA', self.canvas.get_width_height(),
self.canvas.buffer_rgba(0,0))
image = image.transpose(Image.FLIP_TOP_BOTTOM)
dib = ImageWin.Dib(image)
z = ImageWin.HWND(hwnd)
dib.expose(z)
self.current = win32gui.ScreenToClient(hwnd,
win32gui.GetCursorPos())
dc = win.GetDC()
dc.MoveTo(self.start[0], self.start[1])
dc.LineTo(self.current[0], self.start[1])
dc.LineTo(self.current[0], self.current[1])
dc.LineTo(self.start[0], self.current[1])
dc.LineTo(self.start[0], self.start[1])
return 1
elif message == win32con.WM_LBUTTONUP:
print "Hello LBUTTONDOWN "
self.start = None
self.current = None
image = Image.frombuffer('RGBA', self.canvas.get_width_height(),
self.canvas.buffer_rgba(0,0))
image = image.transpose(Image.FLIP_TOP_BOTTOM)
dib = ImageWin.Dib(image)
z = ImageWin.HWND(hwnd)
dib.expose(z)
return 1
else:
print "Hello ELSE"
return win32gui.DefWindowProc(hwnd, message, wParam, lParam)
_______________________________________________
Python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32