3

VisualStudio2003用の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.top予想通り、ずっと進んでいますrc.left0ただし
、への最初の呼び出しの後、、、およびGetClientRectを取得します。 への2回目の呼び出しの後、、、およびを取得します。rc.bottom == 52rc.right == 575
GetClientRectrc.bottom == 48rc.right == 571

誰かが何が起こっているのか分かりますか?

4

2 に答える 2

6

MoveWindowの呼び出しはサイズ変更中です。GetClientRectの代わりにGetWindowRectを使用する必要があります。

クライアントrectclient areaには、ウィンドウの非ウィンドウ要素(borderなど)のみが含まれます。

于 2009-12-15T21:22:02.513 に答える
3

クライアントrectにはウィンドウの境界線は含まれていませんが、MoveRectは境界線を含む長方形を想定しています。代わりにGetWindowRectを使用してください。

于 2009-12-15T21:21:44.043 に答える