создать диалог в диалоговом окне Visual Studio - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать тип ввода «форма» для моего пользователя, поэтому у меня есть проект диалога C ++ в Visual Studio. В этом проекте есть несколько полей, которые можно заполнить. Одно из полей требует дополнительной информации, поэтому я хотел создать «поддиалог» для этого приложения. Я открываю поддиалог, но не могу понять, как вернуть информацию в мое «основное» приложение.

loan_info newLoan;
LoanDlg dlgAbout(&newLoan);
if (dlgAbout.DoModal() == IDOK)
{
    CString string;
    dlgAbout.GetDlgItemText(IDC_EDIT__LOAN_PRINCIPLE, string);
}

Я получаю сообщение об ошибке в 'GetDlgItemText' - кажется, что на данный момент я не могу получить элемент в диалоге (потому что dlgAbout теперь NULL). Будем благодарны за любые указания на создание и доступ к диалогам в проектах Visual Studio «Диалог». Спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

MFC частично является оболочкой ресурсов C ++ для собственных ресурсов Windows. Обычно время жизни объекта C ++ совпадает со временем жизни обернутого ресурса. Заметным исключением являются CDialog классы, полученные из экземпляров, где экземпляры переживают ресурсы собственного окна.

В этом случае вы не можете получить доступ к собственной иерархии окон после того, как DoModal вернется. Вот что GetDlgItemText пытается сделать. Вероятно, он показывает сбойное диалоговое окно подтверждения отладки в сборке отладки, чтобы сообщить вам об этом.

Чтобы обойти эту проблему, вам придется сохранять данные диалога достаточно долго, чтобы вы могли получить к ним доступ после уничтожения собственного окна. Распространенным решением является сохранение данных в классе-оболочке диалога в качестве члена открытого класса. Затем вы можете либо обновить членов класса вручную, когда пользователь вводит данные, либо использовать встроенную поддержку MFC для привязки членов класса к элементам управления. Последнее рекомендуется. Подробности доступны в MSDN: Обмен данными диалога и проверка .

...