Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Координаты окна относительно parent


Автор: The Thing 3.6.2008, 10:52
Такая ситуация.
1. Получаю глобальные(относительно экрана) размеры окна.
2. Изменяю глобальные координаты, как мне надо. (ошибки тут нет)
3. Высчитываю разницу между координатами окон, для определения позиция child-окна, относительно parent-окна.
4. Меняю положение окна.

Данная вещь, частично реализует сплиттер, а точнее изменения размеров child`ов.
Все это реализуется в виде контрола ActiveX.
Так вот, когда я использую в качестве отладчика стандартный диалог, и просто размещаю
на нем свой контрол (он от CWnd), то все работает нормально, а если студийный Test Container,
то проявляется следующая особенность:
rcNewFirst.left и rcNewFirst.top = 3; (сначало посмотрите код)
хотя в первом случае эти параметры были равны 0.
И при MoveWindow() мой child смещается на 3 пикселя по X и Y.
Код

...
CRect rcFirst, rcLast;
m_BoardArr[nLine]->GetWindowRect( &rcFirst );
m_BoardArr[nLine+1]->GetWindowRect( &rcLast );

rcFirst.bottom = y_pos;
rcLast.top = y_pos + HG_TRMLINE;

CRect rcNewFirst, rcNewLast;
rcNewFirst.SetRect( CPoint( rcFirst.TopLeft() - rcWin.TopLeft() ),
    CPoint( rcFirst.BottomRight() - rcWin.TopLeft() ) );
rcNewLast.SetRect( CPoint( rcLast.TopLeft() - rcWin.TopLeft() ),
    CPoint( rcLast.BottomRight() - rcWin.TopLeft() ) );

m_BoardArr[nLine]->MoveWindow( &rcNewFirst );
m_BoardArr[nLine + 1]->MoveWindow( &rcNewLast );

 


Вопрос: как это обойти, что это вообще такое, и от чего зависит?
Можно ли напрямую узнать координаты окна относительно HWND?

Заранее благодарен.

Автор: Earnest 3.6.2008, 11:34
Всегда работай в координатах парента - ты же чайлды таскаешь. 

Автор: The Thing 3.6.2008, 13:04
GetWindowRect( &rcFirst ) - получает глобальные координаты, в том-то и проблема перейти к координатам parent
MoveWindow - работает в координатах parent`а

Автор: Earnest 4.6.2008, 07:29
Какая проблема? ScreenToClient, MapWindowPoints и т.д.
И насчет MoveWindow ты прав только для дочерних окон.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)