Member 13089825 Ответов: 1

Изменение размера элементов внутри группы


HI, i have one group box inside that i haveseveral elements(some CEdit and CButton)
when i am resizing my window group box is resizing and i want to inside controls also should expand / shrink within the group boxes.
for resizing controls inside group box i have written below logic:


Что я уже пробовал:

RepositionControls(CRect& boundingRect)
{
    m_rGroupBox.MoveWindow(boundingRect, TRUE);
    CEdit* rEditPosRightToLeft[] = { &m_rPrefixEdit, &m_rpszFolderpath, &m_rMaxsizectl, &m_rLifetimectl };
    CButton* rButtonPosRightToLeft[] = { &m_rBtnSelect };
    for (size_t z = 0; z < (sizeof(rButtonPosRightToLeft) / sizeof(CButton*)); ++z) {
        CRect rectChildWindow;
        CButton& ctlButton(*rButtonPosRightToLeft[z]);
        ctlButton.GetWindowRect(&rectChildWindow);
        m_rLogStreamResizer.FetchTabDialog().ScreenToClient(&rectChildWindow);
        int nBtnWidth = rectChildWindow.Width();
        int nBtnHeight = rectChildWindow.Height();
        int bx = m_nSideButtonX;
        int by = rectChildWindow.top;
        ctlButton.MoveWindow(bx, by, nBtnWidth, nBtnHeight, TRUE);       
    }
    /*  TODO: need to implement for the  edit controls*/
    for (size_t z = 0; z < (sizeof(rEditPosRightToLeft) / sizeof(CEdit*)); ++z) {
        CRect rectChildWindow;
        CEdit& ctlButton(*rEditPosRightToLeft[z]);
        ctlButton.GetWindowRect(&rectChildWindow);
        m_rLogStreamResizer.FetchTabDialog().ScreenToClient(&rectChildWindow);
        int nBtnWidth = rectChildWindow.Width();
        int nBtnHeight = rectChildWindow.Height();
        int bx = m_nSideButtonX;
        int by = rectChildWindow.top;
        ctlButton.MoveWindow(bx, by, nBtnWidth, nBtnHeight, TRUE);
    }


в приведенном выше коде для логики CButton он работает нормально но для элементов управления CEdit не работает inCEdit control у меня есть chage ширина элемента управления edit зависит от изменения размера
не могли бы вы пожалуйста, помогите мне здесь

1 Ответов

Рейтинг:
12

Jochen Arndt

Вы должны рассчитать ширину в соответствии с доступной шириной, количеством элементов управления и расстоянием между элементами управления и границами.

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

int availWidth = boundingRect.Width();
int numControls = sizeof(rEditPosRightToLeft) / sizeof(rEditPosRightToLeft[0]);
const int borderSpace = 2; // or whatever you want
const int betweenSpace = 4;
int controlWidth = (availWidth - 2 * borderSpace - (numControls - 1) * betweenSpace) / numControls;
Вы также должны рассчитать левое положение для каждого элемента управления. Он начинается с borderSpace и должен быть увеличен на controlWidth + betweenSpace с каждой итерацией цикла. Если вышесказанное controlWidth расчет имеет остаток от окончательного деления, вы также можете получить его и использовать при расчете x должностное положение.


Member 13089825

Привет, спасибо за ваш ответ.
Не могли бы вы дать мне еще какие-нибудь указания?
здесь я хочу изменить размер элементов управления как слева направо(только ширина должна быть обновлена в соответствии с изменением размера), так и сверху вниз(позиция y должна быть изменена сверху вниз)

Jochen Arndt

Делается это аналогично.
Я предлагаю использовать лист бумаги для визуализации необходимых положений, размеров и расстояний (промежутков между элементами). Это значительно упрощает получение необходимых расчетных формул.

Member 13089825

Большое спасибо!.
Теперь он работает нормально.

Jochen Arndt

Приятно слышать, что сейчас он работает.

Спасибо за обратную связь и принятие моего решения.