You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于DwmGetWindowAttribute与DWMWA_EXTENDED_FRAME_BOUNDS的技术疑问

DwmGetWindowAttribute(DWMWA_EXTENDED_FRAME_BOUNDS) 相关问题解答

坐标基准

DWMWA_EXTENDED_FRAME_BOUNDS返回的RECT坐标,基准是屏幕左上角的原点(0,0),和GetWindowRect用的是同一个屏幕坐标空间,但计算逻辑有区别。

为何top=0、left=7却能看到阴影?

  • 窗口阴影是DWM额外绘制在窗口边界外的视觉效果,DWMWA_EXTENDED_FRAME_BOUNDS只统计窗口的可交互实体区域(包含标题栏、客户区),不包含阴影。
  • 你的窗口顶部刚好对齐屏幕顶部,所以实体区域的top就是0,阴影是向下延伸的(屏幕顶部没空间显示上方阴影),所以你能看到顶部的阴影但返回值top为0;left=7是窗口实体区域的左边界,阴影绘制在0到7的区间内,所以你能看到左侧的阴影,但返回的left是实体区域的起始位置。

关于缩放的说明

DWMWA_EXTENDED_FRAME_BOUNDS返回的是物理像素坐标,不受Windows显示缩放设置的影响。对比之下,GetWindowRect返回的是逻辑坐标,会被系统缩放因子调整。

官方文档细节

微软官方对该参数的定义明确:

检索窗口的扩展框架边界。此值以屏幕坐标返回,作为RECT结构。

需要注意:该属性返回的边界不包含DWM绘制的阴影,仅覆盖窗口核心可视区域(非客户区+客户区)。目前没有官方API直接返回包含阴影的完整视觉边界,若需相关数据,需结合其他API(如GetWindowPlacement)自行推导。

内容的提问来源于stack exchange,提问作者Bill Hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:44