winapi - winapi - DeferWindowPos 和 InvalidateRect
问题描述
我有一个允许显示子模式对话框的主窗口。该对话框窗口是使用 DialogBox 函数基于资源文件创建的。它包含一些控件和一个水平拆分器,它们在处理 WM_SIZE 和 WM_MOUSEMOVE 消息时会重新定位/调整大小。我使用 BeginDeferWindowPos、DeferWindowPos 和 EndDeferWindowPos 函数。看起来一切都被正确地重新粉刷了。我还应该在 EndDeferWindowPos 之后调用 InvalidateRect 吗?有没有必要的情况?我不处理 WM_PAINT 消息。
解决方案
该函数的文档DeferWindowPos
强烈建议,只要您没有在参数中SWP_NOREDRAW
设置该位,就不需要在调用后调用:uFlags
InvalidateRect
EndDeferWindowPos
SWP_NOREDRAW 0x0008
不重绘更改。如果设置了此标志,则不会发生任何类型的重新绘制。这适用于客户区、非客户区(包括标题栏和滚动条)以及由于窗口移动而未覆盖的父窗口的任何部分。设置此标志时,应用程序必须显式地使需要重绘的窗口和父窗口的任何部分无效或重绘。
推荐阅读
- c# - 如何按月份比较int日期和字符串
- r - 将函数应用于可定义维度的数组
- c - 如何在 Linux 平台上交叉验证/检查 c 中已初始化和未初始化变量的存储
- database - MongoDB 对象 ID 聚合列表
- java - 使用 slick 2D 导出 eclipse 项目时的一些问题
- assembly - 在汇编 x86 中打印一个 ascii 值
- java - Renjin 无法安装(默认)包
- sql-server - SSIS - 如何在 Excel 中获取特定单元格并将其添加到现有表中,因为它是每一行的自己的列
- javascript - 反应 js useState 钩子。单击复选框时如何使用其中的数组更新json对象的状态
- azure - Azure 数据工厂管道上的 SSIS 项目部署,包括 SSH.NET 等第三方库