djan, я тоже парился раньше с координатами
Вывел для себя такое правило:
GetWindowRect() возвращает координаты абсолютные (то есть в "координатах монитора")
GetClientRect() возвращает координаты клиентской области окна, координаты относительные , то есть отсчитываются от левого верхнего угла окна.
Очень удобна оказалась функция АПИ
::MapWindowPoints
при помощи её хорошо проектировать координаты одного окна на координаты другого.
----------
1) всё, что требуется, сначала считаем в абсолютных координатах (если координаты - какие то другие, то для расчётов приводим к абсолютным)
2) перед MoveWindow прямоугольник приводим к относительным координатам (если дитё двигается по родителю) или оставляем как есть (для окон - диалогом, мейнфреймов)
перевести прямоугольник прямоугольник чайлда из абсолютных координат к координатам родителя можно так:
CRect a_ChildRect;
pChildWindow->GetWindowRect(&a_ChildRect);
a_ChildRect.left++;
a_ChildRect.right++;
MapWindowPoints(
0 //"хендл" рабочего стола
,MyParent->m_hWnd //хендл родительского окна
,(CPoint*)&a_ChildRect //прямоугольник чайлда в абсолютных координатах
,2
);
pChildWindow->MoveWindow(a_ChildRect,1);
- в примере контрол двинется на 1 пиксел вправо
ps кстати, не компилировал, может и наврал чего, писал по памяти , ну по ходу дела поправим, если что )