You are currently offline, waiting for your internet to reconnect

How To Change the Background Color of a Tab Control

This article was previously published under Q179909
SUMMARY
This article demonstrates how to change the background color of each tab ina Tab control. It assumes that you have a dialog box and have selected andsized a Tab control into the dialog using the Resource Editor.
MORE INFORMATION
To change the background color of each tab you must make the Tab controlowner draw and use the FillRect() method to fill the rectangle area of thetab itself with a brush that you create and call the SetBkColor() methodbefore you make a call to the TextOut() method with the text you want toappear on the tab.

First bring up the properties for the tab control in the Resource Editorand select the Styles tab. Select the "Owner draw fixed" check box and saveyour work. If you are dynamically creating the Tab control during thedialog box's initialization with CreateWindow() or CreateWindowEx() be sureto include the TCS_OWNERDRAWFIXED bit in the dwStyle parameter.

The following #defines are used in the sample:
        #define RED     RGB(255,0,0)        #define YELLOW  RGB(255,255,0)        #define MAGENTA RGB(255,0,255)        #define WHITE   RGB(255,255,255)        #define BLUE    RGB(0,0,255)				

If You Are Using the SDK

The brushes in this sample excerpt were created in WM_INITDIALOG and arestatic handles.

Add the WM_DRAWITEM message to the dialog box's procedure.

Sample Code

   case WM_DRAWITEM:      lpdis = (LPDRAWITEMSTRUCT) lParam; // item drawing information      hTabCtrl = GetDlgItem(hDlg, IDC_TAB1);      if (hTabCtrl == lpdis->hwndItem)   // is this the tab control?      {         // which tab? first, second...fifth         switch (lpdis->itemID)         {         case 0:            hbr = hbrRed;            bkColor = RED;            break;         case 1:            hbr = hbrYellow;            bkColor = YELLOW;            break;         case 2:            hbr = hbrMagenta;            bkColor = MAGENTA;            break;         case 3:            hbr = hbrWhite;            bkColor = WHITE;            break;         case 4:            hbr = hbrBlue;            bkColor = BLUE;            break;         }         memset(szTabText, '\0', sizeof(szTabText));         tci.mask = TCIF_TEXT;         tci.pszText = szTabText;         tci.cchTextMax = sizeof(szTabText)-1;         TabCtrl_GetItem(hTabCtrl, lpdis->itemID, &tci);         FillRect(lpdis->hDC, &lpdis->rcItem, hbr);         SetBkColor(lpdis->hDC, bkColor);         TextOut(lpdis->hDC,               lpdis->rcItem.left,               lpdis->rcItem.top,               tci.pszText,               lstrlen(tci.pszText));      }      break;				

If Your Are Using MFC

The brushes referred to are part of the dialog class and were created whenthe dialog constructor was called.

Override the OnDrawItem() method for your CDialog derived class using ClassWizard and add the following code, changing variable names as neccessary.It is important to note that a pointer to a CDC object from the handle ofthe DC passed in via the LPDRAWITEMSTRUCT is required, otherwise only thebackground of the text will be the desired color.

Sample Code

       void CMFCTabCtrlDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis)       {          CDialog::OnDrawItem(nIDCtl, lpdis);          char        szTabText[100];          RECT        rect;          UINT        bkColor;          CBrush      *cbr;          TC_ITEM     tci;          CTabCtrl    *pTabCtrl = (CTabCtrl *)GetDlgItem(IDC_TAB1);          if (pTabCtrl->m_hWnd == lpdis->hwndItem)          {              // which tab?              switch (lpdis->itemID)              {              case 0:                  cbr = &m_brRed;                  bkColor = RED;                  break;              case 1:                  cbr = &m_brYellow;                  bkColor = YELLOW;                  break;              case 2:                  cbr = &m_brMagenta;                  bkColor = MAGENTA;                  break;              case 3:                  cbr = &m_brWhite;                  bkColor = WHITE;                  break;              case 4:                  cbr = &m_brBlue;                  bkColor = BLUE;                  break;              }              memset(szTabText, '\0', sizeof(szTabText));              tci.mask        = TCIF_TEXT;              tci.pszText     = szTabText;              tci.cchTextMax  = sizeof(szTabText)-1;              pTabCtrl->GetItem(lpdis->itemID, &tci);              CDC *dc = CDC::FromHandle(lpdis->hDC);              dc->FillRect(&lpdis->rcItem, cbr);              dc->SetBkColor(bkColor);              TextOut(lpdis->hDC,                      lpdis->rcItem.left,                      lpdis->rcItem.top,                      tci.pszText,                      lstrlen(tci.pszText));          }       }				
Properties

Article ID: 179909 - Last Review: 07/11/2005 18:40:00 - Revision: 1.3

  • Microsoft Platform Software Development Kit-January 2000 Edition
  • Microsoft Visual Studio 97 Service Pack 3
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • kbhowto kbtabctrl kbctrl KB179909
Feedback