วิธีการเปลี่ยนสีพื้นหลังของตัวควบคุมแท็บ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 179909 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการเปลี่ยนสีพื้นหลังของแต่ละแท็บในตัวควบคุมแท็บ นี้อนุมานว่า คุณมีกล่องโต้ตอบ และเลือก และขนาดเป็นตัวควบคุมแท็บลงในกล่องโต้ตอบโดยใช้ตัวแก้ไขของทรัพยากร

ข้อมูลเพิ่มเติม

เมื่อต้องการเปลี่ยน สีพื้นหลังของแต่ละแท็บที่คุณต้องทำการแท็บเจ้าของการควบคุมวาด และใช้เมธอด FillRect() กรอกข้อมูลพื้นที่สี่เหลี่ยมของแท็บเองด้วยแปรงที่คุณสร้าง และเรียกใช้เมธอด SetBkColor() ก่อนที่จะทำการเรียกเมธอด TextOut() ด้วยข้อความคุณต้องการให้ปรากฏบนแท็บ

ขั้นแรกแสดงหน้าคุณสมบัติตัวควบคุมแท็บในตัวแก้ไขทรัพยากร และเลือกลักษณะแท็บเลือกแบบ "เจ้าของวาดถาวร" กล่องกาเครื่องหมาย และบันทึกงานของคุณ ถ้าคุณเป็นแบบไดนามิกสร้างตัวควบคุมแท็บในระหว่างการเริ่มต้นของกล่องโต้ตอบกับ CreateWindow() หรือ CreateWindowEx() ให้แน่ใจว่าได้รวมการ 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

brushes ใน excerpt ตัวอย่างนี้ถูกสร้างใน 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

brushes เรียกว่าเป็นส่วนหนึ่งของคลาโต้ตอบ และถูกสร้างขึ้นเมื่อมีเรียกตัวสร้างการโต้ตอบ

แทนที่วิธี OnDrawItem() สำหรับคลาส CDialog ที่มาของคุณโดยใช้ตัวช่วยสร้างการ Class และเพิ่มต่อไปนี้รหัส การเปลี่ยนชื่อตัวแปรเป็น neccessary มีความสำคัญโปรดสังเกตว่า ตัวชี้ไปวัตถุ CDC จากหมายเลขอ้างอิง DC ส่งผ่านไปผ่าน LPDRAWITEMSTRUCT ที่จำเป็น มิฉะนั้น เท่านั้นเป็นพื้นหลังของข้อความจะเป็นสีที่ต้องการ

ตัวอย่างรหัส

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

คุณสมบัติ

หมายเลขบทความ (Article ID): 179909 - รีวิวครั้งสุดท้าย: 7 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Keywords: 
kbctrl kbhowto kbtabctrl kbmt KB179909 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:179909

ให้ข้อเสนอแนะ

 

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