【问题标题】:windows mfc dialog flashes on InvalidateWindows mfc 对话框在无效时闪烁
【发布时间】:2014-07-21 14:40:23
【问题描述】:

我有一个基于对话框的 MFC 应用程序,其中包含大量文本编辑和一些其他内容。

我调用 Invalidate();大约每秒 10 倍,因为所有这些文本编辑都需要更新(它们都与线程中设置的全局变量相关联)

我希望只有文本编辑字段会闪烁一点,但整个对话框都在闪烁,这不太好。

有没有更好的方法? UpdateData() 只是崩溃

【问题讨论】:

  • 更改编辑控件的内容应该通过推理使其无效,所以我不相信你需要Invalidate()调用根本(假设你正确地允许消息泵来完成它的工作)。 UpdateData 崩溃清楚地表明你一开始就没有做对。
  • 我同意UpdateData导致崩溃必须先修复!

标签: c++ mfc


【解决方案1】:
  1. Invalidate 只是在从消息泵生成下一条 WM_PAINT 消息时重新显示内容。
  2. 如果您在对话框本身上调用 Invalidate 对话框的背景,并且当您没有定义 WS_CLIPCHILDREN 时,所有子级都将被背景画笔覆盖。

如果您想强制立即重绘所有具有减少闪烁的窗口,请在对话框上定义 WS_CLIPCHILDREN 并将 RedrawWindow 与 RDW_UPDATENOW RDW_ALLCHILDREN 一起使用。当编辑控件被更改时,它们将在此时重新显示。

但是每秒十次更新控件可能不是使用 UI 通知用户的好方法。

顺便说一句:当 UpdateData 崩溃时,您的程序中有一个巨大的错误。你应该修复它。 UpdateData 不会立即重新显示编辑和静态数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多