我目前正在使用python(在屏幕上绘制文本)制作游戏叠加层。 我在那里使用pywin32创建了一个不可见的全屏窗口。 我的问题是我创建了窗口并将消息泵入新线程。
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消息,因此我可以看到显示的文本,但是无法更新文本。 我必须在新线程中调用PumpMessages,因为我想运行应用程序其他部分的初始化代码(例如gui或“后端”)
有人知道如何解决此问题吗? 任何帮助,将不胜感激! 对不起,我的英语不好:)
答案 0 :(得分:0)
通过使用InvalidateRect而不是RedrawWindow解决了该问题。 我的新代码:
win32gui.InvalidateRect(hWindow, None, True);