控制CTabCtrl MFC中的处理

时间:2016-09-07 19:01:46

标签: c++ mfc ctabctrl

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

1 个答案:

答案 0 :(得分:0)

我认为它是一个编辑控件,因为它的ID为IDC_EDIT1。正在给出ASSERT,因为您没有IDC_EDIT1的ID作为ConfigDialog的子窗口。它是其中一个标签控件的子项吗? DDX_ *宏仅适用于对话框类的子窗口。

如果您有某个标签的子窗口,请尝试以下操作:

tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest);

要检索它,

tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest);