求救!python3 pywin32 创建窗体没有 WM_CREATE 信息!
def createPropertyWin(hWndParent = None):
def wndProc(hWnd, message, wParam, lParam):
print(message)
if message == win32con.WM_PAINT:
print("WM_PAINT")
hdc, paintStruct = win32gui.BeginPaint(hWnd)
dpiScale = win32ui.GetDeviceCaps(hdc, win32con.LOGPIXELSX) / 60.0
fontSize = 80
lf = win32gui.LOGFONT()
lf.lfFaceName = "Times New Roman"
lf.lfHeight = int(round(dpiScale * fontSize))
hf = win32gui.CreateFontIndirect(lf)
win32gui.SelectObject(hdc, hf)
rect = win32gui.GetClientRect(hWnd)
win32gui.DrawText(
hdc, '测试', -1, rect,
win32con.DT_CENTER | win32con.DT_NOCLIP | win32con.DT_SINGLELINE | win32con.DT_VCENTER
)
win32gui.EndPaint(hWnd, paintStruct)
return 0
elif message == win32con.WM_CREATE:
print("WM_CREATE")
return 0
else:
return win32gui.DefWindowProc(hWnd, message, wParam, lParam)
hInstance = win32api.GetModuleHandle()
className = 'MyCreatePropertyWin'
wndClass = win32gui.WNDCLASS()
wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW | win32con.CS_DBLCLKS
wndClass.lpfnWndProc = wndProc
wndClass.hInstance = hInstance
wndClass.hCursor = win32gui.LoadCursor(None, win32con.IDC_ARROW)
wndClass.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH)
wndClass.lpszClassName = className
wndClassAtom = win32gui.RegisterClass(wndClass)
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_CLIENTEDGE
style = win32con.WS_OVERLAPPEDWINDOW | win32con.CW_USEDEFAULT
hWindow = win32gui.CreateWindowEx(
exStyle,
wndClassAtom,
"属性",
style,
0, 0,
300, 500, hWndParent,
None, hInstance, None
)
win32gui.ShowWindow(hWindow, win32con.SW_SHOWNORMAL)
win32gui.UpdateWindow(hWindow)
win32gui.PumpMessages()
我没看懂你的问题是什么,啥叫没有WM_CREATE 信息?
window创建窗体的机制是注册窗体,初始化窗体,设置窗体消息回调函数,最后显示窗体。
WM_CREATE 是窗体的消息,就是message。由事件出发。在窗口初始创建过程中,将发出WM_CREATE消息给回调函数。然后尽心窗口的建立。
你是哪一步没有WM_CREATE 信息?你需要说明白一点啊
我也是这个样子,我想在窗口创建的时候播放一段音频,但是消息队列中感觉没有WM_CREATE消息,按你的代码来的话,就是控制台上没有打印WM_CREATE