首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetClientRect on WM_SIZING给出错误的大小

GetClientRect on WM_SIZING给出错误的大小
EN

Stack Overflow用户
提问于 2015-03-27 08:20:48
回答 1查看 1.9K关注 0票数 0

我需要得到正确的大小(宽度/高度)窗口的客户区域,当窗口正在调整大小。我试图使用GetClientRect,但它总是给出错误的值(请参阅下面的详细信息)。

代码语言:javascript
复制
User32.RECT clientRECT;
User32.GetClientRect(_handle, out clientRECT);

因此,在创建窗口时,我决定将x-和y-增量存储在窗口rect (带边框)和客户端rect之间,然后用从lParam of WM_SIZING消息接收到的窗口rect对这个增量值进行汇总。

代码语言:javascript
复制
var windowRECT = (User32.RECT)Marshal.PtrToStructure(lParam, typeof(User32.RECT));
var clientAreaWidth = ((windowRECT.right - windowRECT.left) + _xDelta);
var clientAreaHeight = ((windowRECT.bottom - windowRECT.top) + _yDelta);

这个戏法总是给出合适的尺寸。

但是为什么GetClientRect有这么奇怪的行为呢?因此,我编写了这段代码,以获得更多关于正在发生的事情的详细信息。

代码语言:javascript
复制
Debug.WriteLine("dX: " + (clientRECT.right - clientAreaWidth).ToString() + ", dY: " + (clientRECT.bottom - clientAreaHeight).ToString());

然后我开始做项目,开始拖动窗口的右下角.这是输出:

代码语言:javascript
复制
dX: 16, dY: 17 // fast dragging in NW-direction
dX: 21, dY: 16
dX: 34, dY: 25
dX: 92, dY: 62
dX: 110, dY: 75
dX: 94, dY: 65
dX: 60, dY: 48
dX: 22, dY: 19
...
dX: 0, dY: 1 // slow dragging in NW-direction
dX: 0, dY: 2
dX: 0, dY: 1
dX: 0, dY: 1
dX: 0, dY: 1
dX: 1, dY: 1
dX: 0, dY: 1
dX: 1, dY: 2
dX: 0, dY: 1
...
dX: -16, dY: -12 // fast dragging in SE-direction
dX: -68, dY: -65
dX: -77, dY: -75
dX: -53, dY: -43
dX: -22, dY: -17
dX: -5, dY: -4
...
dX: -1, dY: 0 // slow dragging in SE-direction
dX: -1, dY: 0
dX: -1, dY: 0
dX: -1, dY: -1
dX: -1, dY: 0
dX: -1, dY: -1
dX: -1, dY: 0
dX: 0, dY: -1
dX: -1, dY: 0
dX: 0, dY: -1

是什么导致了这种行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 08:29:19

如果要使用WM_SIZING,则需要使用lParam中的rect,而不是GetClientRect的结果。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29296121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档