UInt
Mitglied
Hallo,
ich habe ein Tab-Control mit 2 Tabs auf dem von CFormView abgeleiten View bei der Initialisierung erzeugt. Es wäre aber gut danach bei Bedarf noch zusätzliche Tabs per Knopfdruck einfügen zu können. Wie mache ich das?
Ich habe versucht die neuen Tabs genau so wie bei der Initialisierung einzufügen, aber ich habe es nur geschafft leere Tabs einzufügen. Wenn ich mit .create einen Dialog an den neuen Tab anbinden will, bekomme ich keine Fehler beim kompilieren, dafür aber eine Meldung „Debug Assertion Failed“ (siehe angehängtes Bild), wenn ich einen neuen Tab mit dem Inhalt einfügen will (drucke die Taste "Tab einfügen").
Fehler:
Wincore.cpp
Line 624
ASSERT(pWnd->m_hWnd==NULL) //only do once
Ich nehme an, dass .create nur bei Initialisierung gut ist, aber was für ein Befehl benutze ich stattdessen?
Nun zum Code, den ich dank eurem Forum zusammengestellt habe:
.cpp
Helft mir bitte, ich komme nicht weiter.
ich habe ein Tab-Control mit 2 Tabs auf dem von CFormView abgeleiten View bei der Initialisierung erzeugt. Es wäre aber gut danach bei Bedarf noch zusätzliche Tabs per Knopfdruck einfügen zu können. Wie mache ich das?
Ich habe versucht die neuen Tabs genau so wie bei der Initialisierung einzufügen, aber ich habe es nur geschafft leere Tabs einzufügen. Wenn ich mit .create einen Dialog an den neuen Tab anbinden will, bekomme ich keine Fehler beim kompilieren, dafür aber eine Meldung „Debug Assertion Failed“ (siehe angehängtes Bild), wenn ich einen neuen Tab mit dem Inhalt einfügen will (drucke die Taste "Tab einfügen").
Fehler:
Wincore.cpp
Line 624
ASSERT(pWnd->m_hWnd==NULL) //only do once
Ich nehme an, dass .create nur bei Initialisierung gut ist, aber was für ein Befehl benutze ich stattdessen?
Nun zum Code, den ich dank eurem Forum zusammengestellt habe:
.cpp
Code:
//////////////////////////////////////////////////////////////////////////////////////////////////
// Tabs bei Initialisierung
void CTest_8View::OnInitialUpdate()
{
TCITEM TabItem;
int iIndex;
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
// create the Tabs
CString TabName = "Seite 1";
iIndex = 0;
TabItem.mask = TCIF_TEXT | TCIF_PARAM;
TabItem.lParam = (LPARAM)&m_PropPage1;
TabItem.pszText = (LPTSTR)(LPCTSTR)TabName;
m_TabCtrl.InsertItem(iIndex, &TabItem);
m_TabCtrl.SetItem(iIndex, &TabItem);
TabName = "Seite 2";
iIndex = 1;
TabItem.mask = TCIF_TEXT | TCIF_PARAM;
TabItem.lParam = (LPARAM)&m_PropPage2;
TabItem.pszText = (LPTSTR)(LPCTSTR)TabName;
m_TabCtrl.InsertItem(iIndex, &TabItem);
m_TabCtrl.SetItem(iIndex, &TabItem);
// create Dialogs
m_PropPage1.Create(IDD_PROPPAGE_1, &m_TabCtrl);
m_PropPage2.Create(IDD_PROPPAGE_2, &m_TabCtrl);
// Dialog position
CRect rcItem;
m_TabCtrl.GetItemRect(0, &rcItem);
m_PropPage1.SetWindowPos( NULL,
rcItem.left,
rcItem.bottom + 1,
0,
0,
SWP_NOSIZE | SWP_NOZORDER );
m_PropPage2.SetWindowPos( NULL,
rcItem.left,
rcItem.bottom + 1,
0,
0,
SWP_NOSIZE | SWP_NOZORDER );
// show the first dialog
m_PropPage1.ShowWindow(SW_SHOW);
m_PropPage2.ShowWindow(SW_HIDE);
m_TabCtrl.SetCurSel(0);
}
void CTest_8View::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
TCITEM item;
CWnd* pWnd;
int iNewTab = m_TabCtrl.GetCurSel();
item.mask = TCIF_PARAM;
// aktuellen Tab ausblenden
m_TabCtrl.GetItem(m_uiSelectedTab, &item);
if( item.lParam )
{
pWnd = reinterpret_cast<CWnd*> (item.lParam);
pWnd->ShowWindow(SW_HIDE);
}
// neuen Tab anzeigen
m_TabCtrl.GetItem(iNewTab, &item);
if(item.lParam)
{
pWnd = reinterpret_cast<CWnd*> (item.lParam);
pWnd->ShowWindow(SW_SHOW);
}
*pResult = 0;
}
void CTest_8View::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
m_uiSelectedTab = m_TabCtrl.GetCurSel();
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Insert neue Tabs
// Mit leeren Tabs scheint zu funktionieren
static int TabIndex = 1;
bool CTest_8View::NewTab()
{
TCITEM TabItem;
TabIndex++;
// create the Tabs
CString s;
s.Format(_T("Neuer Tab %d"), TabIndex+1);
CString TabName = s;
TabItem.mask = TCIF_TEXT; // | TCIF_PARAM;
//TabItem.lParam = (LPARAM)&m_Dialog3;
TabItem.pszText = (LPTSTR)(LPCTSTR)TabName;
m_TabCtrl.InsertItem(TabIndex, &TabItem);
m_TabCtrl.SetItem(TabIndex, &TabItem);
// create Dialogs
//m_Dialog3.Create(IDD_DIALOG_3, &m_TabCtrl);------> ASSERT FAILED
// Dialog position
/*
CRect rcItem; ------> ASSERT FAILED
m_TabCtrl.GetItemRect(TabIndex, &rcItem);
m_Dialog3.SetWindowPos( NULL,
rcItem.left,
rcItem.bottom + 1,
0,
0,
SWP_NOSIZE | SWP_NOZORDER );
*/
// show the first dialog
//m_Dialog3.ShowWindow(SW_SHOW);------> ASSERT FAILED
m_TabCtrl.SetCurFocus(TabIndex);
m_TabCtrl.SetCurSel(TabIndex);
return true;
}
void CTest_8View::OnBnClickedButton1()
{
NewTab();
}
Helft mir bitte, ich komme nicht weiter.
