-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGdi32_SetMapMode.py
67 lines (55 loc) · 2.73 KB
/
Gdi32_SetMapMode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import win32api
import win32con
import win32gui
# based on nexus-6's c++ code, converted to python code by AI
def WndProc(hwnd, msg, wParam, lParam):
dc = None
ps = None
if msg == win32con.WM_PAINT:
dc, ps = win32gui.BeginPaint(hwnd)
rect = win32gui.GetClientRect(hwnd)
# Draw rectangle with default pen
win32gui.Rectangle(dc, 100, 100, 300, 300)
# Draw rectangle with red pen using mapping mode MM_HIMETRIC
linecolor = win32gui.CreatePen(win32con.PS_SOLID, 1, win32api.RGB(255, 0, 0))
win32gui.SelectObject(dc, linecolor)
win32gui.SetMapMode(dc, win32con.MM_HIMETRIC)
win32gui.Rectangle(dc, 100, -100, 300, -300)
win32gui.DeleteObject(linecolor)
# Draw rectangle with blue pen using mapping mode MM_LOMETRIC
linecolor1 = win32gui.CreatePen(win32con.PS_SOLID, 1, win32api.RGB(0, 0, 255))
win32gui.SelectObject(dc, linecolor1)
win32gui.SetMapMode(dc, win32con.MM_LOMETRIC)
win32gui.Rectangle(dc, 100, -100, 300, -300)
win32gui.DeleteObject(linecolor1)
# Draw rectangle with purple pen using mapping mode MM_LOENGLISH
linecolor2 = win32gui.CreatePen(win32con.PS_SOLID, 1, win32api.RGB(255, 0, 255))
win32gui.SetMapMode(dc, win32con.MM_LOENGLISH)
win32gui.SelectObject(dc, linecolor2)
win32gui.Rectangle(dc, 100, -100, 300, -300)
win32gui.DeleteObject(linecolor2)
# Draw rectangle with blue pen and PS_DASH pen style using mapping mode MM_ANISOTROPIC
win32gui.SetMapMode(dc, win32con.MM_ANISOTROPIC)
win32gui.SetWindowExtEx(dc, 1, 10)
win32gui.SetViewportExtEx(dc, 1, 1)
linecolor3 = win32gui.CreatePen(win32con.PS_DASH, 1, win32api.RGB(0, 0, 255))
win32gui.SelectObject(dc, linecolor3)
win32gui.Rectangle(dc, 100, 300, 300, 500)
win32gui.DeleteObject(linecolor3)
win32gui.EndPaint(hwnd, ps)
elif msg == win32con.WM_DESTROY:
win32gui.PostQuitMessage(0)
return 0
return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
wc = win32gui.WNDCLASS()
wc.style = 0
wc.lpfnWndProc = WndProc
wc.hInstance = win32api.GetModuleHandle(None)
wc.hIcon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
wc.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH)
wc.lpszClassName = "myWindowClass"
classAtom = win32gui.RegisterClass(wc)
hwnd = win32gui.CreateWindow(classAtom, "Mapping Mode", win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW,
win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 700, 350, 0, 0, wc.hInstance, None)
win32gui.PumpMessages()