Onsize

Тема в разделе "MS Visual C++", создана пользователем zhenek91, 26 авг 2009.

  1. zhenek91

    zhenek91 Гость

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


    Код (Text):
    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 это вектор, содержащий структуры вида
    Код:


    Код (Text):
    struct ResizeStruct
    {
    CRect aRect;//прямоугольник для кнопки
    UINT nID;//идентификатор кнопки
    };
    заполнение структуры происходит при вызове функции
    Код:


    Код (Text):
    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);
    }
    Проблема в том, что почему то при тестировании программы кнопки вместо того, чтобы вести себя, как описано выше, сбиваются в одну кучу в левом краю программы. В чем моя ошибка?
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Посмотрите в отладке:
    1 - какие значения устанавливаются в вектор ResData.
    2 - какие именно значения передаются в MoveWindow
     
  3. zhenek91

    zhenek91 Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Ну так расскажите в чем проблема была, чтобы другие не повторяли ваши ошибки
     

Поделиться этой страницей