2009-12-15 57 views
3

我使用MFC进行Visual Studio 2003.我有一个编号为IDC_COMMENT_EDIT的编辑控件。 在下面的代码中,在我第一次拨打GetClientRect后,我不希望rc的值发生变化。MFC的GetClientRect和MoveWindow不保留大小?

CWnd* pWnd = GetDlgItem(IDC_COMMENT_EDIT); 
if (pWnd != NULL) 
{ 
    RECT rc; 
    pWnd->GetClientRect(&rc); 
    pWnd->MoveWindow(&rc, TRUE); 
    pWnd->GetClientRect(&rc); 
} 

rc.toprc.left0一路过关斩将,符合市场预期。 但是:
第一次致电GetClientRect后,我得到rc.bottom == 52rc.right == 575
第二次调用GetClientRect后,我得到rc.bottom == 48,和rc.right == 571

没有人有任何想法是怎么回事?

回答

5

您对MoveWindow通话是在调整。您需要使用GetWindowRect而不是GetClientRect

客户端RECT仅包括client area这是窗口的非窗口元素(如边框)​​。

+0

谢谢,我想不通为什么我的文本框不断缩小! – des4maisons 2009-12-16 14:59:25

+0

没问题,常见问题。这是命名一个既移动又调整MoveWindow大小的函数的问题! – 2009-12-16 15:38:39

+0

一个更好的名字会像AdjustWindowRect – 2009-12-16 15:39:10

3

客户端RECT不包括窗口边界,但MoveRect预计包含边框的矩形。改用GetWindowRect。

+0

感谢您的帮助! – des4maisons 2009-12-16 15:00:32