wxWidgets/wxPython/tests/test_transparentFrame.py
2007-05-16 23:39:42 +00:00

72 lines
2.3 KiB
Python

import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Am I transparent?")
self.amount = 255
self.delta = -3
p = wx.Panel(self)
self.st = wx.StaticText(p, -1, str(self.amount), (25,25))
self.st.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.NORMAL))
self.timer = wx.Timer(self)
self.timer.Start(25)
self.Bind(wx.EVT_TIMER, self.AlphaCycle)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
def OnCloseWindow(self, evt):
self.timer.Stop()
del self.timer
self.Destroy()
def AlphaCycle(self, evt):
self.amount += self.delta
if self.amount == 0 or self.amount == 255:
self.delta = -self.delta
self.st.SetLabel(str(self.amount))
# Note that we no longer need to use ctypes or win32api to
# make transparent windows, however I'm not removing the
# MakeTransparent code from this sample as it may be helpful
# for somebody someday.
#self.MakeTransparent(self.amount)
# Instead we'll just call the SetTransparent method
self.SetTransparent(self.amount)
def MakeTransparent(self, amount):
hwnd = self.GetHandle()
try:
import ctypes
_winlib = ctypes.windll.user32
style = _winlib.GetWindowLongA(hwnd, 0xffffffecL)
style |= 0x00080000
_winlib.SetWindowLongA(hwnd, 0xffffffecL, style)
_winlib.SetLayeredWindowAttributes(hwnd, 0, amount, 2)
except ImportError:
import win32api, win32con, winxpgui
_winlib = win32api.LoadLibrary("user32")
pSetLayeredWindowAttributes = win32api.GetProcAddress(
_winlib, "SetLayeredWindowAttributes")
if pSetLayeredWindowAttributes == None:
return
exstyle = win32api.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
if 0 == (exstyle & 0x80000):
win32api.SetWindowLong(hwnd,
win32con.GWL_EXSTYLE,
exstyle | 0x80000)
winxpgui.SetLayeredWindowAttributes(hwnd, 0, amount, 2)
app = wx.App(False)
frm = Frame()
frm.Show()
app.MainLoop()