加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – 何时(以及如何)布置Win32窗口的子项以响应调整大小?

发布时间:2020-12-13 20:41:28 所属栏目:Windows 来源:网络整理
导读:调整窗口大小时,Windows会发送几条消息: WM_GETMINMAXINFO WM_ENTERSIZEMOVE WM_EXITSIZEMOVE WM_NCCALCSIZE WM_SIZING WM_SIZE WM_WINDOWPOSCHANGING WM_WINDOWPOSCHANGED 甚至可能更多. 如果我想在调整窗口大小时重新定位孩子,我应该在哪里以及如何这样做
调整窗口大小时,Windows会发送几条消息:

> WM_GETMINMAXINFO
> WM_ENTERSIZEMOVE
> WM_EXITSIZEMOVE
> WM_NCCALCSIZE
> WM_SIZING
> WM_SIZE
> WM_WINDOWPOSCHANGING
> WM_WINDOWPOSCHANGED

甚至可能更多.

如果我想在调整窗口大小时重新定位孩子,我应该在哪里以及如何这样做?
我正在寻找“最好的”方法 – 即具有最少陷阱和最少闪烁的方法.

我目前的方法是使用DeferWindowPos在WM_NCCALCSIZE中执行所有重新定位.
但是,我也试过在WM_WINDOWPOSCHANGED中处理它…但无论我在哪里处理它,似乎总是至少有一个“时刻”当窗口被绘制在中间状态,窗口的大小已经改变,但其内容尚未调整大小.

我还想避免的另一个影响:在孩子移动后移动孩子.我不希望用户看到控件滑落然后因为我的更改而备份 – 它应该具有尽可能少的瞬态效果.

我这样做了吗?是否有一个更好的地方可以摆放窗户的孩子?

您应该在WM_SIZE消息中重新定位窗口,因为这是窗口在完成任务之前收到的最后一个…要重新定位窗口,您可以使用MoveWindow

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读