Beantwortet CTabCtrl und SelChanging

  • Dienstag, 3. April 2012 13:11
     
     

    Hallo,

    ich habe eine abgeleitete Klasse von CTabCtrl erstellt und fange darin die TCN_SELCHANGING Message ab.

    Hier kann ich mit GetCurSel() ohne Probleme den Index des aktuellen TabItems feststellen, dass gerade aktiv ist und demnächst seinen Focus verliert.

    Meine Frage: Wie bekomme ich den Index des TabItems heraus, dass als nächstes aktiviert werden soll?

    Hintergrund: wenn ich den Index des "nächsten" TabItems kenne, kann ich prüfen, ob der gerade aktuelle Tab überhaupt gewechselt werden darf oder nicht!

    Vielen Dank für eure Hilfe!

Alle Antworten

  • Mittwoch, 4. April 2012 07:10
     
     Beantwortet

    Habs selber in einem anderen Forum gefunden, dies war die Lösung:

    void CTabCtrlExt::OnTcnSelchanging(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // das gerade aktive Tab-Fenster benachrichtigen, dass sich an der Auswahl etwas ändern wird
        TCITEM TabItem;
        if( !GetItem(GetCurSel(), &TabItem) )
            *pResult = 0;
        else
        {
            CDialog *pDlg = (CDialog*)TabItem.lParam;
            if( pDlg != NULL && IsWindow(pDlg->GetSafeHwnd()) )
            {

                // welchen Tab (Index) hat der Benutzer gerade angeklickt?

                TCHITTESTINFO ti;
                GetCursorPos( &ti.pt );
                ScreenToClient( &ti.pt );
                int nIndex = HitTest( &ti );
                
                // wParam = Handle auf das TabCtrl, dass die Nachricht geschickt hat, lParam = Index des Tabs, dass als nächstes aktiviert wird
                *pResult = pDlg->SendMessage( WM_TABCTRLEXT_SELCHANGING, (WPARAM)GetSafeHwnd(), (LPARAM)nIndex );
            }
            else
                *pResult = 0;
        }
    }

    • Als Antwort markiert Maze303 Mittwoch, 4. April 2012 07:11
    •