Управляет обработкой в CTabCtrl MFC
У меня есть приложение MFC, у которого есть класс, который наследуется от CTabCtrl, в моем методе Main Dialog::OnInit(), который я делаю.
tabCtrl.InsertItem(0, _T("Tab 1"));
tabCtrl.InsertItem(1, _T("Tab 2"));
tabCtrl.InitDialogs();
tabCtrl.ActivateTabDialogs();
tabCtrl.ShowWindow(SW_SHOW);
tabCtrl - это переменная из класса, которая наследуется от CTabCtrl, метод InitDialogs:
m_Dialog[0]->Create(m_DialogID[0], this);
m_Dialog[1]->Create(m_DialogID[1], this);
m_Dialog[0]->ShowWindow(SW_SHOW);
m_Dialog * содержит оба диалоговых класса, которые я нарисовал из класса ресурсов.
Я вижу обе вкладки так, как нарисовал их при запуске программы, но когда я делаю что-то вроде
UpdateData(TRUE);
valueTest = "tEST";
UpdateData(FALSE);
Я получаю ошибку подтверждения утверждения. Мой DoDataExchange вызывается и выглядит так:
void ConfigDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, valueTest);
}
Я боролся с этим в течение нескольких дней, и я смог найти только примеры с фиктивными вкладками, у которых нет никаких элементов управления внутри них. Есть ли какой-то шаг, который я пропускаю?
Обновление: ошибка подтверждения показывает это
Библиотека времени выполнения Microsoft Visual C++ --------------------------- Ошибка отладки! Программа: C:\Windows\SYSTEM32\mfc140d.dll Файл: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp Строка: 4355 Для получения информации о том, как ваша программа может вызвать ошибку подтверждения, см. документация по Visual C++ для утверждений
И это не в состоянии UpdateData(TRUE) предложение
1 ответ
Я предполагаю, что это элемент управления для редактирования, потому что он имеет идентификатор IDC_EDIT1. ASSERT дается, потому что у вас нет окна с идентификатором IDC_EDIT1 в качестве дочернего окна ConfigDialog. Это дочерний элемент одного из элементов управления вкладками? Макросы DDX_* будут работать только для дочерних окон вашего диалогового класса.
Если у вас есть дочернее окно какой-либо вкладки, попробуйте что-то вроде:
tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest);
Чтобы получить его,
tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest);