如何更改选项卡控件的背景颜色

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 179909
本文已归档。它按“原样”提供,并且不再更新。
概要
本文演示了如何更改的选项卡控件中的每个选项卡的背景色。本示例假定您有一个对话框,并有选择并 Tab 控件的大小调整到使用资源编辑器对话框。
更多信息
要更改的每个选项卡,您必须使选项卡控件所有者绘制和使用 FillRect() 方法来填充选项卡的本身使用您创建和调用 SetBkColor() 方法之前的画笔矩形区域的背景色进行调用 TextOut() 方法,与文本要显示在选项卡上。

第一次显示选项卡控件在资源编辑器中的属性,并选中样式选项卡,选择在"所有者绘制固定"复选框并保存您的工作。如果要在与 CreateWindow() 或 CreateWindowEx() 对话框的初始化过程中动态地创建 Tab 控件一定要包括在 TCS_OWNERDRAWFIXED 位 dwStyle 参数中。

以下 # 定义了在该示例中使用:
        #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)				

如果您正在使用 SDK

此示例的摘录中画笔 WM_INITDIALOG 中创建了,是静态的控点。

将 WM_DRAWITEM 消息添加到对话框中的过程。

示例代码

   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;				

如果您正在使用 MFC

引用该画笔是在对话框类的一部分,对话框构造函数调用时创建。

重写为 CDialog 派生类使用类向导 OnDrawItem() 方法,并添加下面的代码更改为所需的变量名。 值得注意是必需的 CDC 对象指向设置为从该 LPDRAWITEMSTRUCT 通过传递在 DC 的句柄,否则只在文本的背景将所需的颜色。

示例代码

       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));          }       }				

警告:本文已自动翻译

属性

文章 ID:179909 - 上次审阅时间:12/05/2015 08:20:02 - 修订版本: 1.3

Microsoft Platform Software Development Kit-January 2000 Edition, Microsoft Visual Studio 97 Service Pack 3, Microsoft Visual C++ 5.0 专业版, Microsoft Visual C++ 6.0 专业版, Microsoft Visual Basic 5.0 企业版, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbctrl kbhowto kbtabctrl KB179909 KbMtzh
反馈