2
RECT rec;

::GetClientRect(hWnd, &rec);
int windowWidth = rec.right - rec.left, windowHeight = rec.bottom - rec.top;

::printToDebugWindow(windowWidth,windowHeight); //prints 2 numbers

MoveWindow(hWnd,100,100,windowWidth,windowHeight,FALSE);

問題は、windowWidth と windowHeight が何らかの理由で変更されていることです。MoveWindow がウィンドウの寸法を変更しているようです。repaint を TRUE に設定すると、何も変わりません。

出力:

x:560、y:178
x:544、y:140
x:528、y:102
x:512、y:64
x:496、y:26

繰り返しごとに寸法が変わるのはなぜですか?

私も試しました:変化なし

  int windowWidth = rec.right, windowHeight = rec.bottom;
4

2 に答える 2

5

You're getting the size of the client area, not the window. Change:

GetClientRect(hWnd, &rec);

to

GetWindowRect(hWnd, &rec);

Stolen from MSDN, this picture shows the client area:

client area

Now I would suggest just forgetting about that and using SetWindowPos:

SetWindowPos(hWnd, nullptr, 100, 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
于 2013-06-03T23:55:26.330 に答える