我需要在一个窗口上画一些东西(这不是我的窗口 - 它是用户定义的,如果有影响的话)。
我已经通过使用GetDC获取设备上下文并正常绘制来成功地在窗口上绘制了图形,问题是我不知道何时在窗口上绘制 - 窗口不断重绘自己(例如游戏)。 我有一些想法,但到目前为止它们都不好或者没有实现。
- 使用计时器。这是最糟糕的想法,但现在我会尝试任何事情。显然,由于窗口不断重绘,它会闪烁。我考虑在我的绘图之前强制窗口重新绘制,但仍然不好。无法想出一个好的计时器实现... - 钩取WM_PAINT消息。使用SetWindowsHookEx WM_GETMESSAGE钩子,我可以使用一个事件,在其他窗口接收到它时接收WM_PAINT消息,但是WM_PAINT是在完成绘制之前发送的。我在MSDN上发现,除了WH_GETMESSAGE Windows Hook之外,您还可以使用WndProcRetHook,它在处理Windows消息之后被调用并接收包含消息信息的结构,但到目前为止没有运气 - 我无法让它工作... - 钩取绘图函数。我尝试过钩取绘画函数(或函数),例如ReleaseDC和/或EndPaint,这会使窗口无效,以便我可以进行最后一分钟的绘图。这次,我做得很好 - 但它仍然会有点闪烁,并且在某些窗口上钩取ReleaseDC会阻止窗口渲染 - 它甚至不会擦除背景。有时甚至整个进程都会崩溃。
所以我正在寻找一种在窗口显示在屏幕上之前最后绘制的好方法。我更喜欢避免使用SetWindowsHookEx(例如:外部DLL)完成的挂钩,但这也可以。谢谢。
我已经通过使用GetDC获取设备上下文并正常绘制来成功地在窗口上绘制了图形,问题是我不知道何时在窗口上绘制 - 窗口不断重绘自己(例如游戏)。 我有一些想法,但到目前为止它们都不好或者没有实现。
- 使用计时器。这是最糟糕的想法,但现在我会尝试任何事情。显然,由于窗口不断重绘,它会闪烁。我考虑在我的绘图之前强制窗口重新绘制,但仍然不好。无法想出一个好的计时器实现... - 钩取WM_PAINT消息。使用SetWindowsHookEx WM_GETMESSAGE钩子,我可以使用一个事件,在其他窗口接收到它时接收WM_PAINT消息,但是WM_PAINT是在完成绘制之前发送的。我在MSDN上发现,除了WH_GETMESSAGE Windows Hook之外,您还可以使用WndProcRetHook,它在处理Windows消息之后被调用并接收包含消息信息的结构,但到目前为止没有运气 - 我无法让它工作... - 钩取绘图函数。我尝试过钩取绘画函数(或函数),例如ReleaseDC和/或EndPaint,这会使窗口无效,以便我可以进行最后一分钟的绘图。这次,我做得很好 - 但它仍然会有点闪烁,并且在某些窗口上钩取ReleaseDC会阻止窗口渲染 - 它甚至不会擦除背景。有时甚至整个进程都会崩溃。
所以我正在寻找一种在窗口显示在屏幕上之前最后绘制的好方法。我更喜欢避免使用SetWindowsHookEx(例如:外部DLL)完成的挂钩,但这也可以。谢谢。