000
04.10.2005, 16:34 Uhr
oli2006
|
Hi. Ich habe ein Problem mit CTabCtrl. Bei mir besteht das TabCtrl aus 2 Tabs, in denen sich Eingabefelder befinden. Ich kann das Programm auch fehlerfrei ausführen, jedoch kann ich auf die beiden Dialogfelder nicht zugreifen. Wenn ich über die Registerreiter einen Dialog anwähle wird dieser dargestellt, wenn ich jedoch versuche den Focus in eines der Eingabefelder zu setzen passiert nichts!
Ich bin folgendermaßen vorgegangen:
-CMyTabCtrl von CTabCtrl ableiten -Variable anlegen:
C++: |
CMyTabCtrl m_tabMyTabCtrl;
|
-2 Dialoge erstellt -für jeden Dialog eine Klasse erstellt -Registerseiten im Konstrukor erzeugen und im Destruktor löschen
C++: |
CMyTabCtrl::CMyTabCtrl() { m_tabPages[0]=new CTabSuche; m_tabPages[1]=new CTabStatistik; m_nNumberOfPages=2; }
CMyTabCtrl::~CMyTabCtrl() { for(int nCount=0; nCount < m_nNumberOfPages; nCount++) { delete m_tabPages[nCount]; } }
|
-Methoden zur Initialisierung und Behandlungsroutine für Mausklick
C++: |
void CMyTabCtrl::Init() { m_tabCurrent=0; m_tabPages[0]->Create(IDD_SUCHE, this); m_tabPages[1]->Create(IDD_STATISTIK, this);
m_tabPages[0]->ShowWindow(SW_SHOW); m_tabPages[1]->ShowWindow(SW_HIDE);
SetRectangle(); }
void CMyTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) { CTabCtrl::OnLButtonDown(nFlags, point);
if(m_tabCurrent != GetCurFocus()) { m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE); m_tabCurrent=GetCurFocus(); m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW); m_tabPages[m_tabCurrent]->SetFocus(); } }
void CMyTabCtrl::SetRectangle() { CRect tabRect, itemRect; int nX, nY, nXc, nYc;
GetClientRect(&tabRect); GetItemRect(0, &itemRect);
nX=itemRect.left; nY=itemRect.bottom+1; nXc=tabRect.right-itemRect.left-1; nYc=tabRect.bottom-nY-1;
m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW); for(int nCount=1; nCount < m_nNumberOfPages; nCount++) { m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW); } }
|
-Hinzufügen der Tabs in OnInitialUpdate der Formview
C++: |
void CProjektView::OnInitialUpdate() { CFormView::OnInitialUpdate();
TC_ITEM tcItem;
tcItem.mask = TCIF_TEXT; tcItem.pszText = _T("Suche"); tcItem.cchTextMax = (int) strlen(_T("Suche")); m_tabMyTabCtrl.InsertItem(0, &tcItem);
tcItem.mask = TCIF_TEXT; tcItem.pszText = _T("Statistik"); tcItem.cchTextMax = (int) strlen(_T("Statistik")); m_tabMyTabCtrl.InsertItem(1, &tcItem); m_tabMyTabCtrl.Init(); }
|
Wieso kann ich die Dialogfelder nicht ansprechen? |