Visual c++ MFC&x27;s GetClientRect和MoveWindow don';你不能保持身材吗?

Visual c++ MFC&x27;s GetClientRect和MoveWindow don';你不能保持身材吗?,visual-c++,mfc,visual-studio-2003,Visual C++,Mfc,Visual Studio 2003,我正在为VisualStudio2003使用MFC。我有一个ID为IDC\u COMMENT\u Edit的编辑控件。 在下面的代码中,在我第一次调用GetClientRect之后,rc的值不会改变 CWnd* pWnd = GetDlgItem(IDC_COMMENT_EDIT); if (pWnd != NULL) { RECT rc; pWnd->GetClientRect(&rc); pWnd->MoveWindow(&rc, TRUE); p

我正在为VisualStudio2003使用MFC。我有一个ID为
IDC\u COMMENT\u Edit
的编辑控件。 在下面的代码中,在我第一次调用
GetClientRect
之后,
rc
的值不会改变

CWnd* pWnd = GetDlgItem(IDC_COMMENT_EDIT);
if (pWnd != NULL)
{
  RECT rc;
  pWnd->GetClientRect(&rc);
  pWnd->MoveWindow(&rc, TRUE);
  pWnd->GetClientRect(&rc);
}
rc.top
rc.left
始终是
0
,正如预期的那样。 然而:
在第一次调用
GetClientRect
之后,我得到
rc.bottom==52
,和
rc.right==575

在第二次调用
GetClientRect
之后,我得到
rc.bottom==48
,和
rc.right==571


有人知道发生了什么吗?

客户端rect不包括窗口边框,但MoveRect需要一个包含边框的矩形。改用GetWindowRect。

您对的调用正在调整大小。你需要使用而不是


客户端rect仅包括
客户端区域
,它是窗口的非窗口元素(如边框)

谢谢,我不明白为什么我的文本框一直在缩小!没问题,常见问题。这就是命名一个同时移动和调整MoveWindow大小的函数的问题!一个更好的名称应该是类似AdjustWindowRectOr的东西,他们可以提供一个函数,让您在不调整窗口大小的情况下移动窗口。。。调整大小和移动对我来说似乎有点正交。移动窗口两侧的函数的名称没有问题。很明显,它这样做是因为它被赋予了一个矩形,而不是一个点。唯一的问题是OP使用了错误的函数来获取窗口的侧面,如果该函数只更改了位置,这仍然是一个问题,因为客户端rect的位置不是窗口的位置。“rc.top和rc.left始终为0”是真的,因为客户机rect的左上角在客户机坐标中始终为(0,0),OP不应预料到它。