Win32/MFC 从客户端矩形获取窗口矩形

Posted

技术标签:

【中文标题】Win32/MFC 从客户端矩形获取窗口矩形【英文标题】:Win32/MFC Get window rect from client rect 【发布时间】:2008-09-26 15:47:16 【问题描述】:

我知道某处有一个函数可以接受客户端矩形并将其转换为您的窗口矩形。我就是找不到/不记得了!

有人知道是什么吗?

它会做类似的事情:

const CRect client(0, 0, 200, 200);
const CRect window = ClientRectToWindowRect(client);
SetWindowPos(...)

【问题讨论】:

【参考方案1】:

你可能在想AdjustWindowRectEx()。请记住,这是在创建窗口时使用的 - 不能保证它会为现有窗口生成一组准确的窗口尺寸;为此,请使用GetWindowRect()

【讨论】:

【参考方案2】:

这是你要找的吗?

客户端到屏幕

http://msdn.microsoft.com/en-us/library/ms532670(VS.85).aspx

【讨论】:

不,它获取客户端坐标并将其转换为屏幕坐标。 这不考虑窗口边框。在我意识到自己的错误之前,我得到了同样的答案。【参考方案3】:

如果您想将客户端坐标映射到窗口坐标,请使用 ClientToWindow API。

如果您想将客户端坐标映射到屏幕坐标,请使用 ClientToScreen API。

【讨论】:

【参考方案4】:

用于控制重新定位:

RECT client;
::SetRect(&client, 0, 0, 200, 200);
::MapWindowPoints(hwndControl, ::GetParent(hwndControl), (POINT*)&client, 2);
::SetWindowPos(...)

【讨论】:

【参考方案5】:

这将为您提供客户端坐标中的窗口矩形,因此您可以使用 rect(top,left) 作为偏移量

CRect rectFrame;
GetWindowRect(&rectFrame);
ScreenToClient(&rectFrame);

【讨论】:

以上是关于Win32/MFC 从客户端矩形获取窗口矩形的主要内容,如果未能解决你的问题,请参考以下文章

绘制非客户区的问题 - Win32

使用 Win32/MFC 关闭并等待子框架窗口的最佳方法

从 C# 访问 Win32/MFC “Stuff”

更改窗口标题矩形

VC编程中遇到的窗口大小和窗口客户区大小的问题

在macOS中将窗口的形状从矩形更改为其他形状,可以吗?