执行耗时的OnPaint()后,MFC对话框消失

执行耗时的OnPaint()后,MFC对话框消失,mfc,onpaint,Mfc,Onpaint,在我们的应用程序中,我们有一个MFC对话框,可以打开并处理一些需要显示的数据。因此,处理是在OnPaint()事件内延迟启动的。加工 需要一些时间(大约20-30秒),并且完全是算法(没有调用UI API)。 有时在处理完成后,窗口会“消失”。我们发现它被带到父窗口(主框架)后面 在处理完成后立即调用setForeGroundIndow(),或者在非UI线程中执行处理(让OnPaint()在合理的时间内完成)可以消除问题 这个问题大家都知道吗?OnPaint()执行是否有定义的时间限制 谢谢 亚

在我们的应用程序中,我们有一个MFC对话框,可以打开并处理一些需要显示的数据。因此,处理是在OnPaint()事件内延迟启动的。加工 需要一些时间(大约20-30秒),并且完全是算法(没有调用UI API)。 有时在处理完成后,窗口会“消失”。我们发现它被带到父窗口(主框架)后面

在处理完成后立即调用setForeGroundIndow(),或者在非UI线程中执行处理(让OnPaint()在合理的时间内完成)可以消除问题

这个问题大家都知道吗?OnPaint()执行是否有定义的时间限制

谢谢

亚历克斯。

更新窗口或重画窗口打开时,会发送WM_PAINT消息 调用成员函数

调用后,窗口可能会收到内部绘制消息 设置了RDW_INTERNALPAINT标志的重画窗口成员函数。 在这种情况下,窗口可能没有更新区域。申请书 应调用GetUpdate成员函数以确定 窗口有一个更新区域。如果GetUpdate返回0,则 应用程序不应调用BeginPaint和EndPaint成员 功能

应用程序负责检查是否存在任何必要的错误 通过查看内部数据进行内部重新绘制或更新 每个WM_PAINT消息的结构,因为WM_PAINT消息可能 由无效区域和调用 设置了RDW_INTERNALPAINT标志的重画窗口成员函数

Windows仅发送一次内部WM_PAINT消息。一次之后 内部WM_PAINT消息由UpdateWindow发送到窗口 成员函数,则不会发送或发布进一步的WM_PAINT消息 直到窗口无效或直到重新绘制的窗口成员 在设置RDW_INTERNALPAINT标志的情况下再次调用函数

更新窗口或重画窗口打开时,会发送WM_PAINT消息 调用成员函数

调用后,窗口可能会收到内部绘制消息 设置了RDW_INTERNALPAINT标志的重画窗口成员函数。 在这种情况下,窗口可能没有更新区域。申请书 应调用GetUpdate成员函数以确定 窗口有一个更新区域。如果GetUpdate返回0,则 应用程序不应调用BeginPaint和EndPaint成员 功能

应用程序负责检查是否存在任何必要的错误 通过查看内部数据进行内部重新绘制或更新 每个WM_PAINT消息的结构,因为WM_PAINT消息可能 由无效区域和调用 设置了RDW_INTERNALPAINT标志的重画窗口成员函数

Windows仅发送一次内部WM_PAINT消息。一次之后 内部WM_PAINT消息由UpdateWindow发送到窗口 成员函数,则不会发送或发布进一步的WM_PAINT消息 直到窗口无效或直到重新绘制的窗口成员 在设置RDW_INTERNALPAINT标志的情况下再次调用函数


您应该注释掉处理部件,查看窗口是否仍然消失以缩小其范围。您应该注释掉处理部件,查看窗口是否仍然消失以缩小其范围。