问题标签 [flicker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
859 浏览

text - Win32文字绘图拼图

我在 Win32 下有一个小文字绘图拼图。我正在尝试在窗口顶部为我的应用程序用户绘制一些说明。

请参考以下窗口(我已经更改了文本的背景颜色,以便您可以看到边界)

示范
(来源:billy-oneal.com

我目前正在使用 DrawTextEx 将文本绘制到我的窗口,但问题是它没有填满我给它的整个 RECTangle。不绘制该区域就可以了,直到窗口调整大小:

调整大小后的演示
(来源:billy-oneal.com

当文本由于窗口大小而被重新包装时,因为 DrawTextEx 没有清除它的背景,这些工件是剩余的。

我尝试使用 FillRect 填充文本绘制调用后面的区域,这确实消除了视觉伪影,但随后导致文本不断闪烁,因为它被完全擦除然后完全重绘到显示器上。

关于如何获得不包含要使用背景颜色绘制的文本的区域的任何想法?

编辑:如果可能的话,我想避免双重缓冲表格。

EDIT2:当我检测到在调整大小期间换行发生变化时,我只通过重绘文本来解决问题。

0 投票
1 回答
1668 浏览

wxpython - 如何在调整大小(不闪烁)期间将 wx.html.HtmlWindow 保持在同一位置?

我希望能够调整 html 窗口的大小但保持滚动位置。这个例子几乎可以工作,但会闪烁。
测试:
- 使用加载 Html 文件按钮加载一个大小合适的 html 文件
- 向下滚动
- 调整窗口大小。

窗口通过调整大小保持其相同的位置,但它可怕地闪烁。我认为,htmlwindow 的代码每次调整大小时都将滚动位置重置为 0。我想阻止它重绘,直到滚动位置在 post_resize 函数中固定。

我尝试了各种冻结/解冻组合并尝试加入绘画事件,但没有成功。建议?

0 投票
2 回答
6052 浏览

jquery - Firefox jquery scrollTo 闪烁错误

我在这里看到很多关于 Firefox 闪烁的线程,但没有一个能完全描述我遇到的问题。

我有一个水平滚动网站、固定位置菜单和 jquery 插件 .scrollTo 处理下一个和上一个按钮。这在 Chrome 和 Safari 中效果很好(不了解 IE),但在 Firefox 中,每次使用右上角和角落的箭头从左向右滚动时都会闪烁。

在此处查看示例

我已经尝试将所有具有固定位置的元素设置为溢出:自动,但什么也没做。我对 JS 或 Jquery 不是很熟悉,但我知道足以改变事情。任何帮助将不胜感激!

0 投票
2 回答
990 浏览

jquery - jQuery颜色插件:onMouseOver动画导致FF3.5.5闪烁

我正在尝试在鼠标悬停和鼠标悬停时更改 div 的背景颜色。在 MouseOver 上立即变为黄色,在 MouseOut 上缓慢淡出。

function hilightel(keydiv)
{
$('#'+keydiv).animate({ backgroundColor: '#ffffd3' },1);
}
function lolightel(keydiv)
{
$('#'+keydiv).animate({ backgroundColor: '#ffffff' },300);
}

< div onMouseOver=javascript:highlightel('item1'); onMouseOut=javascript:lolightel('item1'); id='item1'>内容</div>

但是,当鼠标移到 div 中的文本上时,它会认为我已经鼠标移出,因此闪烁得很厉害。

不起作用的替代方案:
- animateToClass 不支持背景颜色,所以我使用“颜色”插件
- 我听说 switchClass 在 Chrome 中不起作用
- 不能使用 .hover 因为它们将被动态命名页面中的 div 所以需要一个通用功能

提前致谢...

0 投票
4 回答
8861 浏览

user-interface - Win32 GUI 在调整大小时闪烁

我有一个带有选项卡控件的 Win32 GUI 程序,每个选项卡都有一个列表视图控件。每当调整窗口大小时,都会出现大量闪烁。我尝试了以下事情:

  • 在主 wndproc 中处理 WM_ERASEBKGND 并返回 TRUE。没有效果。
  • 过滤掉事件循环中的所有 WM_ERASEBKGND 消息。没有效果。
  • 在主窗口上设置 WM_CLIPCHILDREN 样式。现在,当窗口调整大小时,列表视图控件会被简单地擦除为白色背景并且不会重绘。
  • 使用 DefWindowPos 而不是 MoveWindow。没有效果。
  • 在 MoveWindow 中为 bRepaint 传递 FALSE。与设置 WS_CLIPCHILDREN 的效果相同(见上文)。

这是 RegisterClassEx 代码:

WM_SIZE 处理程序:

样式如下:

  • 主窗口:WS_OVERLAPPEDWINDOW
  • 选项卡控件:(WS_CHILDWS_VISIBLE
  • 列表视图控件:(WS_CHILD | WS_BORDER | LVS_REPORTWS_VISIBLE
0 投票
6 回答
21699 浏览

c# - 如何防止数据网格中的行在应用程序运行时闪烁

在我正在开发的应用程序中,我正在使用 datagridview 来显示数据。要填充它,我必须按下一个按钮,后台工作程序将开始运行,它将填充一个数据表,当它完成运行时,它将使用数据表作为数据网格的数据源。这工作正常,用户界面保持响应等等。但是现在我已经根据它们的值实现了对行的着色(我还在玩它,所以欢迎提出任何建议):

这给我带来了问题。不是因为着色不起作用,而是它起作用。但是因为它让它变慢了。第一次运行良好,但是当我再次按下按钮时,速度慢得要命,数据网格在闪烁。我希望这个作为后处理运行,所以它(或者更确切地说应该)在后台工作完成后运行。但是当我从 RunWorkerCompleted 事件中调用 applycoloring 时,它只是很慢。我应该怎么做才能防止这种情况?如何确保 UI 在执行新查询时不会闪烁(同时不会丢失网格中的当前数据)。

0 投票
1 回答
1737 浏览

jquery - jQuery 闪烁/Flash 动画

有谁知道一个简洁的 jQuery 效果可以使图像随机闪烁或闪烁?这里的大多数帖子都是“如何停止闪烁”等,因此很难找到任何关于实际使图像闪烁的内容。

0 投票
2 回答
1164 浏览

jquery - Firefox 中的 JQuery 切换/滑块闪烁

嗯...我已经在 stackoverflow 上的各种其他线程上阅读了有关此问题的信息,但在我正在进行的工作中仍然遇到问题(没有涉及那么多令人兴奋的 jQuery)

www.thebeverley.com

简单的切换可以很好地展开,但在折叠时会闪烁 - 您需要向下滚动才能使用相同的按钮折叠。似乎只在 FF 3.5.7 (mac) - 在 Safari 中按预期工作。尝试了各种溢出:#main id 和 elswhere 上的隐藏排列,并在发生冲突时完全删除了 href #。仍然没有喜悦。

我错过了什么,或者有人可以指出我正确的方向吗?

非常感谢,D

0 投票
8 回答
15358 浏览

c++ - 当用户调整我的对话框大小时,如何强制窗口不在我的对话框中重绘任何内容?

当用户抓住一个可调整大小的窗口的一角,然后移动它时,窗口首先移动窗口的内容,然后向正在调整大小的窗口发出 WM_SIZE。

因此,在一个对话框中,我想控制各种子控件的移动,并且我想消除闪烁,用户首先会看到 windows 操作系统认为窗口会是什么样子(因为,AFAICT,操作系统使用 bitblt 方法来移动在发送 WM_SIZE 之前窗口内部的东西)——只有这样我的对话框才能处理移动它的子控件,或者调整它们的大小等,之后它必须强制重新绘制东西,这现在会导致闪烁(在非常至少)。

我的主要问题是:有没有办法强制 Windows 不做这个愚蠢的 bitblt 事情? 如果窗口的控件在调整窗口大小时移动,或者在调整其父级大小时调整自身大小,那么它肯定是错误的。无论哪种方式,让操作系统进行预涂漆只会让作品变得更糟。

我一度认为它可能与 CS_HREDRAW 和 CSVREDRAW 类标志有关。然而,现实情况是我不希望操作系统要求我擦除窗口 - 我只想在操作系统不先更改窗口内容的情况下自己重新绘制(即我希望显示是原来的样子在用户开始调整大小之前 - 没有来自操作系统的任何 bitblit'ing)。而且我不希望操作系统告诉每个控件它也需要重新绘制(除非它恰好是一个实际上被调整大小遮蔽或显示的控件。

我真正想要的:

  1. 在屏幕上更新任何内容之前移动和调整子控件的大小。
  2. 完全绘制所有移动或调整大小的子控件,以使它们在新的大小和位置上没有伪影。
  3. 在子控件之间绘制空格,而不影响子控件本身。

注意:步骤 2 和 3 可以颠倒。

当我将 DeferSetWindowPos() 与标记为 WS_CLIPCHILDREN 的对话框资源结合使用时,上述三件事似乎正确发生。

如果我可以对内存 DC 执行上述操作,然后只在 WM_SIZE 处理程序的末尾执行一个 bitblt,我将获得额外的小好处。

我已经玩了一段时间了,我无法逃避两件事:

  1. 我仍然无法阻止 Windows 执行“预测 bitblt”。 答:请参阅下面的解决方案,该解决方案覆盖 WM_NCCALCSIZE 以禁用此行为。

  2. 我看不出如何构建一个对话框,其中它的子控件绘制到双缓冲区。答案:请参阅下面约翰的答案(标记为答案),了解如何要求 Windows 操作系统双缓冲您的对话框(注意:根据文档,这不允许任何 GetDC() 中间的绘制操作)。


我的最终解决方案(感谢所有做出贡献的人,尤其是 John K.):

经过大量的汗水和泪水,我发现以下技术在 Aero 和 XP 中或在禁用 Aero 的情况下都能完美运行。不存在轻弹(1)。

  1. 挂钩对话过程。
  2. 覆盖 WM_NCCALCSIZE 以强制 Windows 验证整个客户区,而不是 bitblt 任何东西。
  3. 覆盖 WM_SIZE 以使用 BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos 对所有可见窗口执行所有移动和调整大小。
  4. 确保对话窗口具有 WS_CLIPCHILDREN 样式。
  5. 不要使用 CS_HREDRAW|CS_VREDRAW(对话框不使用,因此通常不是问题)。

布局代码由您决定 - 它很容易在布局管理器的 CodeGuru 或 CodeProject 上找到示例,或者自己滚动。

以下是一些代码摘录,可以帮助您了解大部分情况:

调整大小实际上是由 Resize() 成员完成的,如下所示:

也许最后一个棘手的部分可以在 ResizeAgent 的 Reposition() 处理程序中看到:

“棘手”是我们避免试图弄乱任何已被破坏的窗口,并且我们不会尝试将 SetWindowPos 推迟到不可见的窗口(因为这被记录为“将失败”。

我已经在一个隐藏了一些控件的真实项目中测试了上述内容,并使用了相当复杂的布局并取得了巨大的成功。即使没有 Aero,即使您使用对话框窗口的左上角调整大小(大多数可调整大小的窗口在您抓住该句柄 - IE、FireFox 等时会显示最多的闪烁和问题),也有零闪烁 (1)。

如果有足够的兴趣,我可能会被说服使用 CodeProject.com 或类似地方的真实示例实现来编辑我的发现。给我发短信。

(1) 请注意,不可能避免一次平局超过曾经存在的任何内容。对于对话框中没有改变的每一部分,用户什么都看不到(没有任何闪烁)。但是在事情发生变化的地方,用户可以看到变化——这是无法避免的,并且是 100% 的解决方案。

0 投票
2 回答
3708 浏览

graphics - DirectDraw 覆盖

有没有人有 DirectDraw 覆盖的工作示例(代码)?就像屏幕上移动的东西一样。我一直在尝试找到 DirectDraw 覆盖使用的示例,但无法找到。

谢谢你。