Я только что был брошен на проект, написанный на C ++ на VS. У меня есть диалоговое окно с Edit Controls, где пользователь вводит MAC-адрес. Я хотел бы сохранить эту информацию, когда происходит событие «при нажатии». Это сделано для того, чтобы при выходе из приложения оно сохранялось и могло быть загружено снова. Я естественно сохранил бы это в файл и использовал бы основной файловый ввод / вывод.
Вопрос такой: «Какой самый эффективный способ сделать это?». Мои исследования оказались в собственности «DialogResult», но я не смог найти это свойство в VS 2015
https://msdn.microsoft.com/en-us/library/65ad5907(v=vs.100).aspx
Вся помощь очень ценится,
-SDEV
Обычно это делается с помощью хранилища «Профиль» приложения, которое раньше находилось в файле .INI, но теперь находится в реестре, в разделе Программный ключ приложения.
В приложении MFC InitInstance()
обычно есть автоматически сгенерированный вызов SetRegistryKey
, Это берет идентификационную строку и устанавливает хранилище профиля приложения. Итак, если в вашем приложении этого нет, вам нужно добавить что-то вроде SetRegistryKey(_T("MyCompanyGroupOrAppName"));
,
Тогда есть API для хранения и поиска информации. Для редактирования контрольного текста, вы, вероятно, хотите сохранить его с CWinApp::WriteProfileString
, Таким образом, в вашем обработчике вы бы получили текст из элемента управления редактирования в CString
, а затем сохранить его с
AfxGetApp()->WriteProfileString(_T("SectionName"), _T("MacAddress"), MyMacAddressString);
Чтобы вернуть строку позже, используйте что-то вроде:
CString MyMacBeforeTheCrash = pApp->GetProfileString(_T("SectionName"), _T("MacAddress"));
Вот несколько ссылок на документацию:
Похоже, вы не уверены, как получить доступ к тексту из элемента управления редактирования. Есть несколько способов сделать это, но это зависит от того, как настроен ваш диалог.
Если ваш элемент управления имеет CString
переменная, связанная с ним, с DDX (Dialog Data Exchange), затем вы вызываете функцию-член вашего диалогового класса: UpdatData(TRUE);
и после этого его CString
переменная будет содержать текущий текст. Чтобы сохранить значение, вы назначаете новое текстовое значение переменной, затем вызываете UpdateData(FALSE);
,
Если у вас есть доступ к переменной класса для элемента управления редактирования ( CEdit
объект), вы можете скопировать текст элемента управления редактирования в CString
с MyEditControl.GetWindowText(MyString);
, Чтобы скопировать текст строки в элемент управления редактирования, выполните: MyEditControl.SetWindowText(MyString);
,
Если для вашего элемента управления редактированием нет какой-либо переменной, вы можете добавить ее, перейдя в редактор ресурсов своего диалогового окна, щелкнув правой кнопкой мыши элемент управления для редактирования и выбрав в меню «Добавить переменную». Вы сможете выбрать, хотите ли вы добавить объект управления ( CEdit
) или что-то вроде CString
,
Вы также можете получить доступ к тексту элемента управления редактирования, используя не-MFC Win32 API — для этого сначала нужно получить дескриптор окна элемента управления, а затем использовать ::SendMessage
отправлять WM_GETTEXT
а также WM_SETTEXT
сообщения для контроля.
Удачи.
Других решений пока нет …