MFC的GetClientRect和MoveWindow不保留大小?

时间:2009-12-15 21:19:49

标签: visual-c++ mfc visual-studio-2003

我在Visual Studio 2003中使用MFC。我有一个ID为IDC_COMMENT_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.toprc.left一直是0。 然而:
在第一次致电GetClientRect后,我得到rc.bottom == 52rc.right == 575 在第二次致电GetClientRect后,我得到rc.bottom == 48rc.right == 571

有谁知道发生了什么事?

2 个答案:

答案 0 :(得分:5)

您对MoveWindow的来电正在调整大小。您需要使用GetWindowRect代替GetClientRect

客户端rect仅包含client area,它是窗口的非窗口元素(例如边框)。

答案 1 :(得分:3)

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