调整主窗口大小时,静态控件轻微闪烁

2023-11-22

简介及相关信息:

我有一个复杂的绘画要在我的主窗口中实现WM_PAINT处理程序。

我提交了下面的图片来说明:

enter image description here

主窗口有静态控件,而不是具有样式的按钮SS_NOTIFY.

当用户单击它们时,程序中会发生某些操作。

下图显示了主窗口中静态控件的位置:

enter image description here

橙色面板上的地图是EMF文件,左上角和右上角的标志是PNG文件,其他图片是位图。

为了实现这个任务,我决定把整个图画出来WM_PAINT,并对对应图片上的图像放置不可见的静态控件。

因此,我只返回NULL_BRUSH in WM_CTLCOLORSTATIC像这样的处理程序:

case WM_CTLCOLORSTATIC:
    return (LRESULT)( (HBRUSH)GetStockObject(NULL_BRUSH) );

我致力于Windows XP, using MS Visual Studio C++ 2008 Express Edition and pure Win32 API.

One note:从 VS 的 Express 版本开始doesn't有资源编辑器、资源文件和资源头是使用创建的ResEdit从这里:http://www.resedit.net/.

PROBLEM:

当我调整窗口大小时,静态控件会轻微闪烁。

我为解决问题所做的努力:

我已经处理过WM_ERASEBKGND(回(LRESULT)1),并且我排除了样式CS_VREDRAW and CS_HREDRAW从我的窗口类来看,因此不应因此而导致闪烁。

我的窗户没有WS_CLIPCHILDREN style.

EDIT:为了回应下面的评论,我解释了为什么我的窗口没有设置这种样式:

问题是桌面图片的一部分在静态控件所在的位置可见。

我为两个处理程序实现了双缓冲,以避免闪烁。

我已经使用过该工具GDIView,从这里下载:http://www.nirsoft.net/utils/gdi_handles.html追查GDI leaks.

每次我调整窗口大小时,GDIView在区域列中显示+4,这意味着我泄漏了区域。

我不明白这怎么可能,因为我不使用操作区域的 API。

为了准确说明我所面临的情况,我制作了一个演示应用程序,并附有详尽的评论:http://www.filedropper.com/geotermistgrafika

我相信这是比发布代码更有效的方法,因为它会消耗太多空间。

问题:

如何修改演示项目中的代码以消除闪烁?

我的方法是否错误?如果是,正确的方法是什么?

谢谢。 问候。


当主窗口调整大小时WM_SIZE处理程序移动静态子窗口。

当移动子窗口时,Windows 会自动将子控件的工作区从旧位置复制到新位置。

然后主窗口将在WM_PAINT处理程序。

换句话说,当调整窗口大小时,所有静态控件都会移动到新位置,然后重新绘制窗口的其余部分。这种不同步表现为闪烁。

您可以通过传递来避免这种情况SWP_NOCOPYBITS标记为SetWindowPos.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调整主窗口大小时,静态控件轻微闪烁 的相关文章

随机推荐

  • .NET 3.5 C# 与 System.Timer System.ObjectDisposeException 的错误:无法访问已释放的对象

    在我的 Windows 服务应用程序中 我经常使用计时器 我只使用 System Timers 我以前从未遇到过这个问题 但突然我遇到了这个异常 System ObjectDisposedException Cannot access a
  • 文本框的默认值

    如何设置文本框的值 我有这个 1 文本框 我想将默认值设置为 0 这样当用户不输入任何内容时我的计算仍然可以 这可以在标记 aspx 中完成 如下所示
  • 是否有与 jQuery .has() 等效的普通 JS?

    在这个 jQuery 选择器中 相当于 has 的普通 JS 是什么 main container children analytics has a not promo Within main container 我正在尝试选择所有 ana
  • 在 QtCreator 中使用 cin

    对于学校 我们使用 C 作为首选语言 我目前正在使用 QtCreator 作为 IDE 它的 GUI 库非常棒 学校正在使用 Visual Studio 然而 我们编写的大多数程序都使用 cin 和 cout 进行输入 输出 cout 作为
  • 为什么 WCF 在作为 Web 服务托管时不能“正确”使用/公开抽象类型

    我设计 Web 服务已经有一段时间了 但直到最近才不得不公开 复杂 的 WCF 服务 我对 WCF 中明显缺乏对抽象类型的 适当支持 感到困惑 当然 你可以使用它们 当然你可以让它们 工作 你只是不会得到你想要的 第一个问题是 如果您从具有
  • Rails 推荐的添加示例数据的方式

    我有一个类似于下面的 Rake 脚本 但我想知道是否有更有效的方法来执行此操作 而不必删除数据库 运行所有迁移 重新播种数据库 然后添加示例数据 namespace db do desc Fill database with sample
  • 不符合 POSIX 的系统上 ssize_t 的替代方案

    我正在编写一个涉及网络 I O 的程序 所以send and recv使用的是 POSIX 函数 他们返回一个ssize t 这也是 POSIX 特定的 包装纸看起来像这个 ATM ssize t sock send int sock co
  • Mac 终端发送带附件的电子邮件

    我正在尝试制作一个 bash 脚本 该脚本将向所有联系人发送一封电子邮件 其中包含一条消息和一个附件 这并非出于恶意目的 我怎么能这样做呢 这可能吗 提前致谢 我之前使用 uuencode 来完成此操作 uuencode source tx
  • 如何动态添加组件到Java JScrollPane

    我正在尝试用 Java 制作 GUI 应用程序 但在 JScrollPane 中动态添加 更新组件时遇到问题 我有两个 JPanel P1 和 P2 其中 P1 有一个用于设置应用程序参数的表单 P2 包含一些 GUI 组件 这些组件根据
  • Angularjs 合并两个对象,忽略空值和缺失值

    例如 从这两个对象 var object1 color yellow size null age 7 weight null var object2 color blue size 51 age null 我想要这个 对象 2 覆盖对象 1
  • 为什么 Angular 8 路由器无法在带有 WkWebView 的 Cordova IOS 中工作?

    我有一个现有的应用程序构建Angular8 及其代码由一个网站和 2 个移动应用程序共享Android and IOS 在帮助下捆绑Cordova 它工作正常 但苹果公司宣布他们很快将不再支持使用UIWebView 自 2020 年 4 月
  • 让匿名用户使用 Google Drive SDK 将文件上传到我的 Google 云端硬盘

    我正在构建一个网络应用程序 我需要让用户上传文件 我想将所有用户上传的文件存储在 我的 中央 Google 云端硬盘中 用户不必登录他们的 Google 帐户或授权该应用程序 因为他们将上传到我的 Google 云端硬盘 这可能吗 您应该使
  • 按位运算 - 零填充右移(>>>)用法?

    一般来说 位移位 gt gt lt lt 允许我们除 乘 2 例子 9 base 10 00000000000000000000000000001001 base 2 9 gt gt 2 base 10 000000000000000000
  • Wpf Observable 集合和 DataGrid 不更新更改

    我在视图模型中有一个可观察集合 它实现了 Bindable Base 如下所示 请查看 MoveUp 和 MoveDown 方法 它们绑定到视图中的两个按钮 当按下向上按钮时 我希望数据网格中的选定行根据数据库中的序列列向上移动一步 向下移
  • 在实体框架编码迁移中创建全文索引

    太长了 如何使用 Entity Framework 5 编码迁移添加全文索引 我在使用实体框架迁移向数据库添加全文索引时遇到问题 它需要从一开始就存在 因此我尝试修改自动生成的 InitialCreate 迁移来添加它 由于没有办法通过 D
  • `with canvas:` (Python `with Something() as x:`) 如何在 Kivy 中隐式工作?

    我刚刚意识到在 Kivy 中使用添加顶点指令的方式有一些神秘的东西 至少对我来说 withPython 语句 例如 方式with使用是这样的 some code class MyWidget Widget some code def som
  • ActiveMQ 和 maxPageSize

    我想将 maxPageSize 设置为比默认值 200 更大的数字 这就是我在 activemq xml 文件中设置的方式
  • 在 Linux 上执行 int 3 中断是停止整个进程还是仅停止当前线程?

    假设架构是x86 操作系统是基于Linux的 给定一个多线程进程 其中单个线程执行int 3指令 中断处理程序是否停止执行整个进程或仅停止执行该指令的线程int 3操作说明 由于问题是 Linux 特定的 所以让我们深入研究内核源代码 我们
  • 静态变量失去价值

    我面临一个关于我在整个项目中使用的静态变量的问题 它包含文件中的一些字段 在某些情况下 变量会失去其价值 但并非总是如此 我读过有关静态变量生命周期的内容 她在 3 种情况下丢失了值 1 类被卸载 2 JVM 关闭 3 进程死亡 所以我有一
  • 调整主窗口大小时,静态控件轻微闪烁

    简介及相关信息 我有一个复杂的绘画要在我的主窗口中实现WM PAINT处理程序 我提交了下面的图片来说明 主窗口有静态控件 而不是具有样式的按钮SS NOTIFY 当用户单击它们时 程序中会发生某些操作 下图显示了主窗口中静态控件的位置 橙