Nasıl yapılır: bir sekme denetimi, arka plan rengini değiştirme

Makale çevirileri Makale çevirileri
Makale numarası: 179909 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, her sekme, sekme denetimindeki arka plan rengini değiştirmek gösterilmiştir. Bu, bir iletişim kutusu ve seçili ve Kaynak Düzenleyicisi'ni kullanarak iletişim bir sekme denetimi boyutta varsayar.

Daha fazla bilgi

Her sekme, sekme denetim sahibi çizmek ve FillRect() yöntemi oluşturmak ve SetBkColor() yöntemini önce bir fırça ile sekmesinin kendisini Dikdörtgen alanı doldurmak için yapmanız gereken arka plan rengini değiştirmek için sekmesinde görünmesini istediğiniz metni TextOut() yöntem çağrısı yapın.

Ilk kaynak Düzenleyicisi'nde sekme denetiminin özelliklerini getirmek ve stiller sekmesini Select "Owner çizmek sabit" onay kutusunu seçin ve çalışmanızı kaydedin. Sekme denetiminin CreateWindow() veya CreateWindowEx() iletişim kutusunun başlatma sırasında dinamik olarak oluşturuyorsanız dwStyle parametresinde bit TCS_OWNERDRAWFIXED eklemek emin olun.

Aşağıdaki # tanımlar örnekte kullanılan:
        #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 kullanıyorsanız

Fırçaları bu alıntı içinde WM_INITDIALOG içinde oluşturulan ve statik tanıtıcıları olur.

Iletinin WM_DRAWITEM iletişim kutusunun yordama ekleyin.

Örnek kod

   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;
				

Bilgisayarınızı yüklenmişken MFC kullanma

Başvurulan fırçaları <a0>iletişim</a0> sınıfının bir parçasıdır ve iletişim kurucu çağrıldığında oluşturulmuş.

Sınıf Sihirbazı'nı kullanarak kendi CDialog türetilmiş sınıf OnDrawItem() yöntemini geçersiz kılın ve değişken adları gerekli değiştirilmesi aşağıdaki kodu ekleyin. Işleyicinin LPDRAWITEMSTRUCT geçirilen etki alanı DENETLEYICISI, gelen HDM nesneye bir işaretçi gereklidir, aksi durumda, istediğiniz rengi yalnızca metnin arka planı olur dikkate almak önemlidir.

Örnek kod

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

Özellikler

Makale numarası: 179909 - Last Review: 11 Temmuz 2005 Pazartesi - Gözden geçirme: 1.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Platform Software Development Kit - Ocak 2000 Sürümü
  • 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 Enterprise Edition for Windows 6.0
Anahtar Kelimeler: 
kbmt kbctrl kbhowto kbtabctrl KB179909 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:179909

Geri Bildirim Ver

 

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