Как создать несколько элементов управления динамически при нажатии - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь создать несколько строк элементов управления (поле редактирования, флажок и кнопка удаления) в диалоговом окне M.F.C динамически во время выполнения при нажатии кнопки. А также все добавленные элементы управления должны отображаться в окне прокрутки. Но, к сожалению, я не могу найти решение этой проблемы. У кого-нибудь есть идеи?

Я могу создать один ряд элементов управления. Моя проблема заключается в том, как добавить несколько строк при нажатии кнопки «Добавить», а также удалить эту строку, нажав кнопку «Удалить» в той же строке.

Это должно выглядеть примерно так после того, как я щелкнул несколько раз:

|     Edit Box: Type in a Name          |    |Add| 

|Edit Box| |Name 1 (Edit Box)| |Edit Box| |Delete|   ^ 
|Edit Box| |Name 2 (Edit Box)| |Edit Box| |Delete|   | 
|Edit Box| |Name 3 (Edit Box)| |Edit Box| |Delete|   |
etc...                                               v

Вот мой код:

int CSettingDlg::AddControlSet() //Create a single row of controls
{
    int d = 3500;
    if (m_pStrAdd.IsEmpty() == FALSE)
    {
        GetDlgItem(IDC_TEST1)->GetWindowRect(&rect);
        ScreenToClient(&rect);

        EditBox = new CEdit;
        EditBox->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY, rect, this, d++);

//using the same code above to create 2 more Edit box

        Delete = new CButton;
        Delete->Create(_T("Del"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, d++);
        return TRUE;
    }
}

void CSettingDlg::OnBnClickedAddSettingdlg() //Add button Event handler
{
        UpdateData();
        AddControlSet();
}

1 Ответ

1 голос
/ 21 мая 2019

Когда вы имеете дело с динамическим созданием элемента управления в оконной среде, вы должны знать X и Y направление для рисования / создания элемента управления в форме.

Далее следует направление монитора:

enter image description here

Теперь предположим, что вы создаете элемент управления в форме, начиная с CRect rect(0, 0, 100, 50);

Затем одинэлемент управления в одной строке будет размещен в этом месте (поле редактирования в вашем случае), и когда вы добавляете кнопку удаления рядом с полем редактирования в той же строке, вам следует добавить несколько координат по оси X , чтобы получить новыйрасположение кнопки удаления.Следовательно, прямоугольник следующего местоположения будет выглядеть примерно так: CRect rect(105, 0, 205, 50);

Таким же образом, когда для перехода к следующему ряду следует добавить ось Y с несколькими координатами, чтобы получить новое местоположение для следующего ряда.Например, координаты управления редактирования следующей строки будут CRect rect(0, 55, 100, 105);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...