123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- # The start of a win32gui generic demo.
- # Feel free to contribute more demos back ;-)
-
- import math
- import random
- import time
-
- import win32api
- import win32con
- import win32gui
-
-
- def _MyCallback(hwnd, extra):
- hwnds, classes = extra
- hwnds.append(hwnd)
- classes[win32gui.GetClassName(hwnd)] = 1
-
-
- def TestEnumWindows():
- windows = []
- classes = {}
- win32gui.EnumWindows(_MyCallback, (windows, classes))
- print(
- "Enumerated a total of %d windows with %d classes"
- % (len(windows), len(classes))
- )
- if "tooltips_class32" not in classes:
- print("Hrmmmm - I'm very surprised to not find a 'tooltips_class32' class.")
-
-
- def OnPaint_1(hwnd, msg, wp, lp):
- dc, ps = win32gui.BeginPaint(hwnd)
- win32gui.SetGraphicsMode(dc, win32con.GM_ADVANCED)
- br = win32gui.CreateSolidBrush(win32api.RGB(255, 0, 0))
- win32gui.SelectObject(dc, br)
- angle = win32gui.GetWindowLong(hwnd, win32con.GWL_USERDATA)
- win32gui.SetWindowLong(hwnd, win32con.GWL_USERDATA, angle + 2)
- r_angle = angle * (math.pi / 180)
- win32gui.SetWorldTransform(
- dc,
- {
- "M11": math.cos(r_angle),
- "M12": math.sin(r_angle),
- "M21": math.sin(r_angle) * -1,
- "M22": math.cos(r_angle),
- "Dx": 250,
- "Dy": 250,
- },
- )
- win32gui.MoveToEx(dc, 250, 250)
- win32gui.BeginPath(dc)
- win32gui.Pie(dc, 10, 70, 200, 200, 350, 350, 75, 10)
- win32gui.Chord(dc, 200, 200, 850, 0, 350, 350, 75, 10)
- win32gui.LineTo(dc, 300, 300)
- win32gui.LineTo(dc, 100, 20)
- win32gui.LineTo(dc, 20, 100)
- win32gui.LineTo(dc, 400, 0)
- win32gui.LineTo(dc, 0, 400)
- win32gui.EndPath(dc)
- win32gui.StrokeAndFillPath(dc)
- win32gui.EndPaint(hwnd, ps)
- return 0
-
-
- wndproc_1 = {win32con.WM_PAINT: OnPaint_1}
-
-
- def OnPaint_2(hwnd, msg, wp, lp):
- dc, ps = win32gui.BeginPaint(hwnd)
- win32gui.SetGraphicsMode(dc, win32con.GM_ADVANCED)
- l, t, r, b = win32gui.GetClientRect(hwnd)
-
- for x in range(25):
- vertices = (
- {
- "x": int(random.random() * r),
- "y": int(random.random() * b),
- "Red": int(random.random() * 0xFF00),
- "Green": 0,
- "Blue": 0,
- "Alpha": 0,
- },
- {
- "x": int(random.random() * r),
- "y": int(random.random() * b),
- "Red": 0,
- "Green": int(random.random() * 0xFF00),
- "Blue": 0,
- "Alpha": 0,
- },
- {
- "x": int(random.random() * r),
- "y": int(random.random() * b),
- "Red": 0,
- "Green": 0,
- "Blue": int(random.random() * 0xFF00),
- "Alpha": 0,
- },
- )
- mesh = ((0, 1, 2),)
- win32gui.GradientFill(dc, vertices, mesh, win32con.GRADIENT_FILL_TRIANGLE)
- win32gui.EndPaint(hwnd, ps)
- return 0
-
-
- wndproc_2 = {win32con.WM_PAINT: OnPaint_2}
-
-
- def TestSetWorldTransform():
- wc = win32gui.WNDCLASS()
- wc.lpszClassName = "test_win32gui_1"
- wc.style = win32con.CS_GLOBALCLASS | win32con.CS_VREDRAW | win32con.CS_HREDRAW
- wc.hbrBackground = win32con.COLOR_WINDOW + 1
- wc.lpfnWndProc = wndproc_1
- class_atom = win32gui.RegisterClass(wc)
- hwnd = win32gui.CreateWindow(
- wc.lpszClassName,
- "Spin the Lobster!",
- win32con.WS_CAPTION | win32con.WS_VISIBLE,
- 100,
- 100,
- 900,
- 900,
- 0,
- 0,
- 0,
- None,
- )
- for x in range(500):
- win32gui.InvalidateRect(hwnd, None, True)
- win32gui.PumpWaitingMessages()
- time.sleep(0.01)
- win32gui.DestroyWindow(hwnd)
- win32gui.UnregisterClass(wc.lpszClassName, None)
-
-
- def TestGradientFill():
- wc = win32gui.WNDCLASS()
- wc.lpszClassName = "test_win32gui_2"
- wc.style = win32con.CS_GLOBALCLASS | win32con.CS_VREDRAW | win32con.CS_HREDRAW
- wc.hbrBackground = win32con.COLOR_WINDOW + 1
- wc.lpfnWndProc = wndproc_2
- class_atom = win32gui.RegisterClass(wc)
- hwnd = win32gui.CreateWindowEx(
- 0,
- class_atom,
- "Kaleidoscope",
- win32con.WS_CAPTION
- | win32con.WS_VISIBLE
- | win32con.WS_THICKFRAME
- | win32con.WS_SYSMENU,
- 100,
- 100,
- 900,
- 900,
- 0,
- 0,
- 0,
- None,
- )
- s = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
- win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, s | win32con.WS_EX_LAYERED)
- win32gui.SetLayeredWindowAttributes(hwnd, 0, 175, win32con.LWA_ALPHA)
- for x in range(30):
- win32gui.InvalidateRect(hwnd, None, True)
- win32gui.PumpWaitingMessages()
- time.sleep(0.3)
- win32gui.DestroyWindow(hwnd)
- win32gui.UnregisterClass(class_atom, None)
-
-
- print("Enumerating all windows...")
- TestEnumWindows()
- print("Testing drawing functions ...")
- TestSetWorldTransform()
- TestGradientFill()
- print("All tests done!")
|