求救!python3 pywin32 创建窗体没有 WM_CREATE 信息!

求救!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()

1个回答

我没看懂你的问题是什么,啥叫没有WM_CREATE 信息?
window创建窗体的机制是注册窗体,初始化窗体,设置窗体消息回调函数,最后显示窗体。
WM_CREATE 是窗体的消息,就是message。由事件出发。在窗口初始创建过程中,将发出WM_CREATE消息给回调函数。然后尽心窗口的建立。
你是哪一步没有WM_CREATE 信息?你需要说明白一点啊

sjk2lq
sjk2lq 窗口是能创建出来的....
7 个月之前 回复
sjk2lq
sjk2lq 就是执行上面的代码,在回调函数中message没有WM_CREATE的消息
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐