Cómo cambiar el color de fondo de un control ficha

Seleccione idioma Seleccione idioma
Id. de artículo: 179909 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo cambiar el color de fondo de cada ficha en un control de ficha. Se supone que se tiene un cuadro de diálogo y ha seleccionado y tamaño de un control de ficha en el cuadro de diálogo mediante el Editor de recursos.

Más información

Para cambiar el color de fondo de cada ficha debe asegurarse de la ficha propietario del control dibujar y utilice el método FillRect() para rellenar el área de rectángulo de la ficha con un pincel que crear y llamar al método SetBkColor() antes de realizar una llamada al método TextOut() con el texto que desee que aparezca en la ficha.

Primero abrir las propiedades para el control de ficha en el Editor de recursos y seleccione la casilla de verificación Seleccionar el "propietario dibuje fijo" ficha de estilos y guarde su trabajo. Si está creando el control de ficha dinámicamente durante la inicialización del cuadro de diálogo con CreateWindow() o CreateWindowEx() asegúrese de incluir el TCS_OWNERDRAWFIXED bit en el parámetro dwStyle.

La siguiente directiva # define utilizada en este ejemplo:
        #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)
				

Si utiliza el SDK

Los pinceles en este ejemplo extraído se crearon en WM_INITDIALOG y son identificadores estáticos.

Agregue el mensaje WM_DRAWITEM al procedimiento del cuadro de diálogo.

Código de ejemplo

   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;
				

Si el se mediante MFC

Los pinceles que se hace referencia forman parte de la clase de diálogo y se crearon cuando se llama al constructor diálogo.

Reemplace el método OnDrawItem() para la clase derivada de CDialog mediante el Asistente para clases y agregue el código siguiente, cambiar nombres de variables como necesarios. Es importante tener en cuenta que un puntero a un objeto CDC partir del identificador del DC que se pasa a través de la LPDRAWITEMSTRUCT es necesario, de lo contrario en la que sólo el fondo del texto será el color deseado.

Código de ejemplo

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

Propiedades

Id. de artículo: 179909 - Última revisión: lunes, 11 de julio de 2005 - Versión: 1.3
La información de este artículo se refiere a:
  • Microsoft Platform Software Development Kit-January 2000 Edition
  • Service Pack 3 de Microsoft Visual Studio 97
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palabras clave: 
kbmt kbctrl kbhowto kbtabctrl KB179909 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 179909

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com