0b0849b5a5
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46083 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
72 lines
2.3 KiB
Python
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()
|