2016-09-07 24 views
0

我有一個MFC應用程序,它具有從CTabCtrl繼承的類,在我的Main Dialog :: OnInit()方法上。控件在CTabCtrl中處理MFC

tabCtrl.InsertItem(0, _T("Tab 1")); 
tabCtrl.InsertItem(1, _T("Tab 2")); 
tabCtrl.InitDialogs(); 

tabCtrl.ActivateTabDialogs(); 
tabCtrl.ShowWindow(SW_SHOW); 

標籤ctrl是從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); 
} 

我一直是這樣strugling好幾天了,我只能夠發現誰沒有在他們裏面的任何控件虛設接線片的例子。有沒有我失蹤的步驟?

更新:斷言錯誤顯示這個

微軟的Visual C++運行時庫--------------------------- 調試斷言失敗!程序:C:\ Windows \ SYSTEM32 \ mfc140d.dll文件: f:\ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ mfc \ wincore.cpp行:4355對於 關於程序如何導致斷言失敗見 在Visual C++文檔上斷言

而且它無法的UpdateData(TRUE)句子

+0

什麼是你的實際問題?你看到斷言失敗? –

+0

我的問題是,我無法更改控件的屬性,當我嘗試這樣做時,我得到一個斷言失敗。 –

+2

請發佈斷言對話框的**精確**錯誤消息。您可以使用[Ctrl] + C複製文本。屏幕截圖可以提供幫助,但這不是必需的。 – IInspectable

回答

0

我以爲這是一個編輯的控制,因爲它有IDC_EDIT1的ID。由於您沒有IDC_EDIT1的ID窗口作爲ConfigDialog的子窗口,因此ASSERT被給出。它是其中一個選項卡控件的孩子嗎? DDX_ *宏只適用於對話類的子窗口。

如果你有一些標籤的子窗口,你可以試試:

tabCtrl.SetDlgItemText(IDC_EDIT1, valueTest); 

爲了找回它,

tabCtrl.GetDlgItemTText(IDC_EDIT1, valueTest); 
+0

之前調用UpdateData的意思,我試過這個,ConfigDialog是mainDialog的childDialog之一,但我不確定我是否理解你在說什麼 –

+0

您正嘗試從中獲取文本並編輯控件。該控件是該對話框的子項還是該選項卡的子項?另外,你在調用DoModal之前調用UpdateData()嗎?您必須先調用DoModal,然後才能調用UpdateData。 –

+0

編輯控件是選項卡的子項,我必須在選項卡對話框的主對話框o中調用DoModal嗎? –