使用窗口和消息循环,例如Hello,World程序,使用最简单的Windows程序。
假设在我进入消息循环之前,我进入窗口(在wm_paint的外部处理中顽皮地完成,但是请耐心等待。)
如果我花了超过5秒的时间来做这件事,或者我画了一些东西然后花5秒做其他事情,在我开始消息循环之前,那么消息系统似乎超时了#39; PeekMessage的MSDN文档表示它变得“无响应”。然后把它变成一个鬼魂'窗口。
我的问题是,它也会清除窗口的内容!
有没有办法阻止它这样做?同样没有反应的'如果我在官方wm_paint处理过程中花费太长时间进入窗口,则会显示标题;它也会通过生成更多wm_paint消息而开始表现得很奇怪。
如果所有事情(例如复杂的渲染或图像处理)必须在5秒内完成,或者任何算法需要继续刺激消息队列以阻止它超时,那么这似乎是非常严格的限制!
答案 0 :(得分:0)
这是设计的。您必须继续检查消息,以便您可以响应用户事件,例如调整窗口大小或关闭窗口。更糟糕的是,如果您的应用程序没有响应事件,那么可能会导致其他应用程序冻结,因为它们可能会向您的应用程序发送消息并等待回复。
如果您需要进行大量处理,请定期检查消息,或者在单独的线程中完成工作。
答案 1 :(得分:-1)
创建一个线程,用于在缓存位图上进行大量绘制。虽然位图还没有准备好,只需打印WM_PAIN事件"处理请等待......"例如。什么时候准备打印那个位图。并摧毁线程。