How To Change the Background Color of a Tab Control

原创 2004年07月15日 13:55:00

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 in a Tab control. It assumes that you have a dialog box and have selected and sized 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 control owner draw and use the FillRect() method to fill the rectangle area of the tab itself with a brush that you create and call the SetBkColor() method before you make a call to the TextOut() method with the text you want to appear on the tab.

First bring up the properties for the tab control in the Resource Editor and select the Styles tab. Select the "Owner draw fixed" check box and save your work. If you are dynamically creating the Tab control during the dialog box's initialization with CreateWindow() or CreateWindowEx() be sure to 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 are static 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 when the dialog constructor was called.

Override the OnDrawItem() method for your CDialog derived class using Class Wizard 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 of the DC passed in via the LPDRAWITEMSTRUCT is required, otherwise only the background 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)); } } 

MFC中tab control控件的使用方法

一、新建一个MFC工程, 取名Tabctrl, 选择基于对话框, 然后点完成。   二、删除对话框上默认添加的三个控件,添加Tab Control控件,属性设置:ID:IDC_TAB1    ...
  • xinm1001
  • xinm1001
  • 2016年10月06日 20:33
  • 1027

Tab Control控件简单使用

本文讲述在普通对话框上添加标签的简单示例 第一步拖一个Tab Control到对话框上并添加变量m_tabCtrl;    第二步添加两个对话框资源IDD_DIALOG1,IDD_D...
  • imxiangzi
  • imxiangzi
  • 2014年08月27日 15:50
  • 792

VC/MFC如何设置对话框背景颜色

方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。  (这个函数已经废弃) 1 void SetDialogBkColor(COLORREF clrC...
  • jiangqin115
  • jiangqin115
  • 2015年01月27日 15:33
  • 697

【AE】缺少Color属性或方法解决办法

【AE】缺少Color属性或方法解决办法 最近在学AE,在研究模板时,经常会碰到缺少XXX属性(方法)的困扰,仔细研究后,发现大部分情况下,中文版AE在套模板的时会经常遇到,...
  • ZKCoCo2014
  • ZKCoCo2014
  • 2016年12月19日 15:33
  • 4483

MFC入门学习之控件(3)标签控件Tab Control的添加和使用

向对话框中拖入一个tab control控件,调整好大小以适合要求 对于控件类,我们需要定义一个控件类的对象,通过对象的成员方法来将需要添加的内容显示在对话框中,并通过一定的逻辑来控制标签项的显示...
  • codectq
  • codectq
  • 2014年02月12日 21:23
  • 6062

例说WIN32 Tab控件使用

今天查找了一天关于SDK下,TAB控件的使用,到处都是C++的,本人还没开始学习C++,所以只能学习SDK方式使用TAB控件,搞了一天终于搞定了 ,现在在这里记录下,以便后来人有需要。 先直接上效果图...
  • liuyunjay66
  • liuyunjay66
  • 2013年07月14日 19:19
  • 2910

【Itext】itext5添加表格背景颜色,itext pdf行变色

itext pdf隔行换色 itext5添加表格背景颜色 新需求,隔行换色,itext in action 是个很好的说明书,照着英文读下来,很简单的进行了实现,思路如下: 1.先创建Pd...
  • ae6623
  • ae6623
  • 2013年05月29日 09:13
  • 5167

VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)

上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分。        标签控件的创建        MFC为标签控件的操作提供了CTabCtrl类。        与之前的控件类似,...
  • my_lord_
  • my_lord_
  • 2016年08月24日 21:14
  • 404

MFC之Tab Control控件简单使用

在MFC当中使用Tab Control控件切换不同的界面,使用起来会复杂一些,至少是比Qt中的Tab Widget复杂得多。我接下来会以一个MFC对话框应用程序为例子,说明Tab Control控件的...
  • u010780613
  • u010780613
  • 2016年12月26日 10:15
  • 2559

MFC之标签控件Tab Control

标签控件的创建        MFC为标签控件的操作提供了CTabCtrl类。        与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Control,也可以使用CTab...
  • q5512049
  • q5512049
  • 2015年09月01日 15:17
  • 656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:How To Change the Background Color of a Tab Control
举报原因:
原因补充:

(最多只允许输入30个字)