views:

396

answers:

2

I'm using MFC for Visual Studio 2003. I have an Edit Control with ID IDC_COMMENT_EDIT. In the following code, after my first call to GetClientRect, I don't expect the value of rc to change.

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

rc.top and rc.left are 0 all the way through, as expected. However:
After the first call to GetClientRect, I get rc.bottom == 52, and rc.right == 575.
After the second call to GetClientRect, I get rc.bottom == 48, and rc.right == 571.

Does anyone have any idea what is going on?

+3  A: 

The client rect doesn't include the window borders, but MoveRect expects a rectangle that includes the borders. Use GetWindowRect instead.

Mark Ransom
Thanks for the help!
des4maisons
+4  A: 

Your call to MoveWindow is resizing. You need to use GetWindowRect instead of GetClientRect.

The client rect only includes the client area which is the non windows elements (such as border) of the window.

Brian R. Bondy
thanks, I couldn't figure out why my text box kept shrinking!
des4maisons
No problem, common problem. That's the problem with naming a function that both moves and resizes MoveWindow!
Brian R. Bondy
A better name would be something like AdjustWindowRect
Brian R. Bondy
Or they could have provided a function to let you move your window without resizing it... resize and moving seem kind of orthogonal to me.
des4maisons