GetClientRect и MoveWindow в MFC не сохраняют размер? - PullRequest
3 голосов
/ 16 декабря 2009

Я использую MFC для Visual Studio 2003. У меня есть элемент управления Edit с идентификатором 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.top и rc.left - это 0 на всем пути, как и ожидалось. Однако:
После первого звонка на GetClientRect я получаю rc.bottom == 52 и rc.right == 575.
После второго звонка на GetClientRect я получаю rc.bottom == 48 и rc.right == 571.

Кто-нибудь знает, что происходит?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2009

Ваш звонок на MoveWindow изменяется. Вам нужно использовать GetWindowRect вместо GetClientRect .

Клиентский прямоугольник включает только client area, который не является элементами окна (например, граница) окна.

3 голосов
/ 16 декабря 2009

Прямоугольник клиента не включает границы окна, но MoveRect ожидает прямоугольник с границами. Вместо этого используйте GetWindowRect.

...