0

我有一个 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) 语句

4

1 回答 1

0

我假设它是一个编辑控件,因为它的 ID 为 IDC_EDIT1。给出 ASSERT 是因为您没有 ID 为 IDC_EDIT1 的窗口作为 ConfigDialog 的子窗口。它是选项卡控件之一的子项吗?DDX_* 宏仅适用于对话框类的子窗口。

如果您有某个选项卡的子窗口,请尝试以下操作:

tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest);

要找回它,

tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest);
于 2016-09-07T19:40:14.150 回答