新线程中的 PumpMessages

PumpMessages in new thread

我目前正在 python 中制作游戏叠加层(在屏幕上绘制文本)。 我使用 pywin32 创建了一个不可见的全屏 window。 我的问题是我创建了 window 并在新线程中发送消息。

def run_overlay_thread():
    thr = threading.Thread(target=game_overlay.main, args=())
    thr.setDaemon(True)
    #thr.setDaemon(False)
    thr.start()

所以当我这样调用 RedrawWindow 函数时:

win32gui.RedrawWindow(hWindow, None, None, win32con.RDW_INVALIDATE | win32con.RDW_ERASE)

没有任何反应(没有 WM_PAINT 消息被触发)。

def wndProc(hWnd, message, wParam, lParam):
    print('called with message:{}'.format(message))
    if message == win32con.WM_PAINT:
        hdc, paintStruct = win32gui.BeginPaint(hWnd)
        ... more draw code ...

WM_PAINT 消息在创建 window 时触发一次,所以我可以看到显示的文本,但我无法更新文本。 我必须在新线程中调用 PumpMessages,因为我想 运行 初始化应用程序其他部分的代码(例如 gui 或 "backend")

有人知道如何解决这个问题吗? 任何帮助,将不胜感激! 抱歉我的英语不好:)

通过使用 InvalidateRect 而不是 RedrawWindow 解决了这个问题。 我的新代码:

    win32gui.InvalidateRect(hWindow, None, True);