Управляет обработкой в ​​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);
Другие вопросы по тегам