Способ синхронизации данных и просмотра в MFC выглядит примерно так:
Предположим, у вас есть поле для редактирования с идентификатором ресурса IDC_MY_EDITBOX и вы хотите связать его с объектом CString.Изменения в CString должны отражаться в поле редактирования, а изменения в вашем строковом объекте должны обновлять ваш пользовательский интерфейс.Для этого примера давайте назовем ваш объект CString переменной-членом mEditBoxString
class MapCreator : public CDialog
{
//Everything else omitted for brevity
CString mEditBoxString;
};
Ваш DoDataExchange должен выглядеть примерно так:
void MapCreator ::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_MY_EDITBOX, mEditBoxString);
}
Это установило двустороннюю связь междупеременная и представление ( Поле редактирования )
Если вы измените mEditBoxString в коде и хотите, чтобы он отображался в пользовательском интерфейсе.Каким-то образом DoDataExchange должен быть вызван.Вы делаете это, вызывая CWnd :: UpdateData , который в вашем случае будет методом базового класса.
Если вы передаете FALSE вUpdateData означает, что пользовательский интерфейс будет обновляться с любыми изменениями, которые вы сделали с mEditBoxString.
Если вы передаете TRUE в UpdateData, это означает, что переменная mEditBoxString будет обновлена из пользовательского интерфейса.Поэтому, если пользователь действительно отредактировал поле, новое значение будет сохранено в mEditBoxString
Допустим, у вас также есть кнопка (скажем, LOAD ) в вашем диалоге, котораяподключен к этой функции
void CMapCreatorDlg::OnLoadClicked()
{
//Do you heavy loading stuff here
mEditBoxString = "Load Complete";
UpdateData(FALSE);
}
После этого в вашем диалоговом окне отобразится Загрузка завершена в окне редактирования.