Onsize

  • Автор темы zhenek91
  • Дата начала
Z

zhenek91

Вопрос таков: перегружаю функцию OnSize(). В своем диалоговом окне добиваюсь, чтобы кнопки при растягивании либо вверх, либо вправо сохраняли свои позиции относительно главного окна.
Получил такой код:
Код:


Код:
void CMobileTISDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(Flag)
{
CRect R = CRect(0,0,0,0);
GetWindowRect(&R);
ScreenToClient(&R);
LONG right = R.right - MinSize.right;// СRect MinSize заполняется в OnInitDialog и содержит размеры главного окна при старте программы
LONG top = R.top - MinSize.top;
int nCount = ResData.size();
for(int i=0;i<nCount;i++)
{
GetDlgItem(ResData[i].nID)->MoveWindow(ResData[i].aRect.left+right,
ResData[i].aRect.top+top,
ResData[i].aRect.Width(),
ResData[i].aRect.Height());
}
}
}

ResData это вектор, содержащий структуры вида
Код:


Код:
struct ResizeStruct
{
CRect aRect;//прямоугольник для кнопки
UINT nID;//идентификатор кнопки
};

заполнение структуры происходит при вызове функции
Код:


Код:
void CMobileTISDlg::SetResData(UINT nID)
{
ResizeStruct Res;
Res.aRect = CRect(0,0,0,0);
GetDlgItem(nID)->GetClientRect(&Res.aRect);
Res.nID = nID;
ResData.push_back(Res);
}

Проблема в том, что почему то при тестировании программы кнопки вместо того, чтобы вести себя, как описано выше, сбиваются в одну кучу в левом краю программы. В чем моя ошибка?
 
E

European

Посмотрите в отладке:
1 - какие значения устанавливаются в вектор ResData.
2 - какие именно значения передаются в MoveWindow
 
Z

zhenek91

Разобрался, надо чаще в msdn нюансы функций мне освежать, а то забываю некоторые моменты, потом мучаюсь))тему можно закрывать
 
E

European

Ну так расскажите в чем проблема была, чтобы другие не повторяли ваши ошибки
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!