CTabCtrl / Kein Zugriff auf die Dialogfelder



  • 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:

    CMyTabCtrl    m_tabMyTabCtrl;
    

    -2 Dialoge erstellt
    -für jeden Dialog eine Klasse erstellt
    -Registerseiten im Konstrukor erzeugen und im Destruktor löschen

    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

    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

    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?



  • Hab das übrigens nach dieser Anleitung gemacht...
    mit einer Änderung bei der Festlegung der Namen der Tabs.

    http://www.developer.com/net/cplus/article.php/627271




Anmelden zum Antworten