5,534,119 members and growing! (17,039 online)
Email Password   helpLost your password?
Desktop Development » Tabs & Property Pages » General     Intermediate

Setup a Tab Control Easily to Show and Hide Objects With STabCtrl

By Parko

Set up a tab control easily to show and hide objects with STabCtrl
VC6, C++Windows, NT4, Win2K, MFC, VS6, Visual Studio, Dev

Posted: 13 Mar 2002
Updated: 13 Mar 2002
Views: 104,578
Bookmarked: 23 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
19 votes for this Article.
Popularity: 4.94 Rating: 3.86 out of 5
1 vote, 12.5%
1
0 votes, 0.0%
2
1 vote, 12.5%
3
1 vote, 12.5%
4
5 votes, 62.5%
5

Sample Image - STabCtrl.gif

Introduction

I first submitted this code and article way back in Feb '99 and Jul '99 on the CodeGuru site. Wow, do the years go by fast! It's still there and going strong, and I still use the control today in newer projects that I've worked on since the one in whcih the control first turned up in. I've never had a need to change the code so far, but have decided to re-submit here on CodeProject.

Anyway, a lot of projects that I've working make use of tab controls, and on the tab pages there are typically up to 10 controls! And using the ON_NOTIFY(TCN_SELCHANGE... ) message, in the parent window becomes painful. 'Why not use property pages?' people ask. Sure that would make things easier, but the pages on property pages take up the entire parent window and we've got layouts that require any number of controls to not be on a page but around the tab control somewhere. To do that with property pages requires a bit of painful coding to get things where you want them, and if scaling of the page is involved it's even harder!

The STabCtrl, although very simple, I've found to be extremely useful. It implements a tab control that automatically handles the showing and hiding of objects attached to a tab's various pages, eliminating the need to do so via the ON_NOTIFY(TCN_SELCHANGE... ) message in a parent window.

To use the control:

  1. Simply replace any instance of a CTabCtrl with CSTabCtrl (remember to include the header file STabCtrl.h), initialize it as you would an MFC CTabCtrl.
  2. Use the AttachControlToTab member to attach you objects to the various available pages.
  3. Use the SetCurSel member to programmatically show a tab's particular page.

Note Steps 1, 2 & 3 are typically done in the parent dialogs ::OnInitDialog() member. Once done, the tab control will show and hide the attached objects depending on the users tab selection.

// file : SomeDialogClass.h 


class CSomeDialogClass : public CDialog 
{ 
    CSTabCtrl m_TabCtrl; 
    CTreeCtrl m_TreeCtrl; 
    CListCtrl m_ListCtrl; 
    CComboBox m_ComboCtrl; 

    virtual BOOL OnInitDialog(); 
}; 

// file : SomeDialogClass.cpp

BOOL CSomeDialogClass::OnInitDialog() 
{ 
    CDialog::OnInitDialog();

    //////////////////////////////////////////////////////// 

    // set up tabs. 


    PSTR pszTabItems[] = 
    { 
        "Tab Sheet 1 : Tree control", 
        "Tab Sheet 2 : List control", 
        "Tab Sheet 3 : Combobox control", 
        NULL 
    }; 

    TC_ITEM tcItem; 

    for(INT i = 0; pszTabItems[i] != NULL; i++) 
    { 
        tcItem.mask = TCIF_TEXT; 
        tcItem.pszText = pszTabItems[i]; 
        tcItem.cchTextMax = strlen(pszTabItems[i]); 
        m_TabCtrl.InsertItem(i,&tcItem); 
    } 

    // attach controls to tabs pages.

    // attach tree control to first page 

    m_TabCtrl.AttachControlToTab(&m_TreeCtrl,0); 
    // attach list control to second page 

    m_TabCtrl.AttachControlToTab(&m_ListCtrl,1); 
    // attach combo box control to third page

    m_TabCtrl.AttachControlToTab(&m_ComboCtrl,2); 

    // initialize tab to first page. 

    m_TabCtrl.SetCurSel(0); 

    //////////////////////////////////////////////////////// 

}

Anyway...hope this is of use to everyone!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Parko


Parko, aka Simon Parkinson-Bates, spends his days cutting code, his evenings chasing after his 5.5 year old daughter and cleaning up after his 3.5 year old son, and his nights cutting code.
Occupation: Web Developer
Location: Australia Australia

Other popular Tabs & Property Pages articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 16 of 16 (Total in Forum: 16) (Refresh)FirstPrevNext
Subject  Author Date 
QuestionIt couldn't work under SDI?memberSyouki_kou18:15 6 May '08  
GeneralUsing CSTabCtrl without a resource entrymemberMichael Farrugia12:00 11 Jun '07  
QuestionXP static background issuememberCASILASI1:29 16 Apr '06  
GeneralRe: XP static background issuememberDouglas Fraser4:50 28 Apr '08  
GeneralIs it possible to do multiline (stacked ) tabs with STabCtrl?memberJimatKC17:05 28 Mar '06  
GeneralRe: Is it possible to do multiline (stacked ) tabs with STabCtrl?memberParko18:26 28 Mar '06  
GeneralRe: Is it possible to do multiline (stacked ) tabs with STabCtrl?memberJimatKC21:22 28 Mar '06  
General'AttachControlToTab' : is not a member of 'CTabCtrl'memberpepeyman3:58 19 Apr '05  
GeneralRe: 'AttachControlToTab' : is not a member of 'CTabCtrl'memberParko13:11 19 Apr '05  
GeneralSTabCtrl without resourcememberFred_12321:23 23 Jan '03  
GeneralRe: STabCtrl without resourcemembermatlin12312:06 29 Mar '05  
GeneralRe: STabCtrl without resourcememberParko15:48 29 Mar '05  
GeneralResource View??sussanonymous10:46 26 Sep '02  
GeneralRe: Resource View??memberParko2:52 27 Sep '02  
GeneralRe: Resource View??memberstealth kid23:49 31 Aug '03  
GeneralPaint?memberTobias4:12 1 Jul '02  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 13 Mar 2002
Editor: James Spibey
Copyright 2002 by Parko
Everything else Copyright © CodeProject, 1999-2008
Web09 | Advertise on the Code Project