我有一个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 For 有关程序如何导致断言失败的信息,请参阅 关于断言的Visual C ++文档
它没有UpdateData(TRUE)句子
答案 0 :(得分:0)
我认为它是一个编辑控件,因为它的ID为IDC_EDIT1。正在给出ASSERT,因为您没有IDC_EDIT1的ID作为ConfigDialog的子窗口。它是其中一个标签控件的子项吗? DDX_ *宏仅适用于对话框类的子窗口。
如果您有某个标签的子窗口,请尝试以下操作:
tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest);
要检索它,
tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest);