Spaces:
Sleeping
Sleeping
# | |
# Window creation example | |
# | |
# This example creates a minimal "control" that just fills in its | |
# window with red. To make your own control, subclass Control and | |
# write your own OnPaint() method. See PyCWnd.HookMessage for what | |
# the parameters to OnPaint are. | |
# | |
import win32api | |
import win32con | |
import win32ui | |
from pywin.mfc import dialog, window | |
class Control(window.Wnd): | |
"""Generic control class""" | |
def __init__(self): | |
window.Wnd.__init__(self, win32ui.CreateWnd()) | |
def OnPaint(self): | |
dc, paintStruct = self.BeginPaint() | |
self.DoPaint(dc) | |
self.EndPaint(paintStruct) | |
def DoPaint(self, dc): # Override this! | |
pass | |
class RedBox(Control): | |
def DoPaint(self, dc): | |
dc.FillSolidRect(self.GetClientRect(), win32api.RGB(255, 0, 0)) | |
class RedBoxWithPie(RedBox): | |
def DoPaint(self, dc): | |
RedBox.DoPaint(self, dc) | |
r = self.GetClientRect() | |
dc.Pie(r[0], r[1], r[2], r[3], 0, 0, r[2], r[3] // 2) | |
def MakeDlgTemplate(): | |
style = ( | |
win32con.DS_MODALFRAME | |
| win32con.WS_POPUP | |
| win32con.WS_VISIBLE | |
| win32con.WS_CAPTION | |
| win32con.WS_SYSMENU | |
| win32con.DS_SETFONT | |
) | |
cs = win32con.WS_CHILD | win32con.WS_VISIBLE | |
w = 64 | |
h = 64 | |
dlg = [ | |
["Red box", (0, 0, w, h), style, None, (8, "MS Sans Serif")], | |
] | |
s = win32con.WS_TABSTOP | cs | |
dlg.append( | |
[ | |
128, | |
"Cancel", | |
win32con.IDCANCEL, | |
(7, h - 18, 50, 14), | |
s | win32con.BS_PUSHBUTTON, | |
] | |
) | |
return dlg | |
class TestDialog(dialog.Dialog): | |
def OnInitDialog(self): | |
rc = dialog.Dialog.OnInitDialog(self) | |
self.redbox = RedBox() | |
self.redbox.CreateWindow( | |
None, | |
"RedBox", | |
win32con.WS_CHILD | win32con.WS_VISIBLE, | |
(5, 5, 90, 68), | |
self, | |
1003, | |
) | |
return rc | |
class TestPieDialog(dialog.Dialog): | |
def OnInitDialog(self): | |
rc = dialog.Dialog.OnInitDialog(self) | |
self.control = RedBoxWithPie() | |
self.control.CreateWindow( | |
None, | |
"RedBox with Pie", | |
win32con.WS_CHILD | win32con.WS_VISIBLE, | |
(5, 5, 90, 68), | |
self, | |
1003, | |
) | |
def demo(modal=0): | |
d = TestPieDialog(MakeDlgTemplate()) | |
if modal: | |
d.DoModal() | |
else: | |
d.CreateWindow() | |
if __name__ == "__main__": | |
demo(1) | |