Τρόπος αλλαγής του χρώματος φόντου από ένα στοιχείο ελέγχου καρτέλας

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 179909 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο επιδεικνύει τον τρόπο αλλαγής του χρώματος φόντου του κάθε σελίδα σε ένα στοιχείο ελέγχου καρτέλας. Προϋποθέτει ότι έχετε ένα παράθυρο διαλόγου και έχετε επιλέξει και μεγέθους ενός στοιχείου ελέγχου καρτέλας στο παράθυρο διαλόγου, χρησιμοποιώντας το πρόγραμμα επεξεργασίας του πόρου.

Περισσότερες πληροφορίες

Για να αλλάξετε το χρώμα φόντου για κάθε καρτέλα που πρέπει να κάνετε έλεγχο κάτοχος σχεδίαση και χρησιμοποιήστε τη μέθοδο FillRect() για το γέμισμα της περιοχής ορθογώνιο της καρτέλας ίδια με πινέλο να δημιουργήσετε και να καλέσετε τη μέθοδο SetBkColor() πριν από την καρτέλα, κάνετε μια κλήση της μεθόδου TextOut() με το κείμενο που θέλετε να εμφανίζεται στην καρτέλα.

Πρώτα την εμφάνιση των ιδιοτήτων για το στοιχείο ελέγχου καρτέλας στην Επεξεργασία πόρων και ενεργοποιήστε το στυλ καρτέλα. επιλογή του "κάτοχος σχεδιάσετε σταθερή" και αποθηκεύστε την εργασία σας. Εάν τη δυναμική δημιουργία του στοιχείου ελέγχου καρτέλας κατά την προετοιμασία του πλαισίου διαλόγου με CreateWindow() ή CreateWindowEx() θα πρέπει να συμπεριλάβετε το TCS_OWNERDRAWFIXED bit στην παράμετρο 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

Τα πινέλα αναφέρεται και αποτελούν τμήμα της κλάσης παραθύρου διαλόγου και δημιουργήθηκαν όταν έγινε κλήση της κατασκευής του παραθύρου διαλόγου.

Παράκαμψη της μεθόδου OnDrawItem() για την κλάση CDialog προέρχεται Οδηγό κλάσης και προσθέστε τον ακόλουθο κώδικα, αλλάζοντας τα ονόματα μεταβλητών ως απαιτούνται καρτέλας. Είναι σημαντικό να σημειωθεί ότι απαιτείται ένας δείκτης προς ένα αντικείμενο CDC από τον δείκτη χειρισμού στον ελεγκτή Τομέα που διαβιβάστηκε μέσω της 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));
          }
       }
				

Ιδιότητες

Αναγν. άρθρου: 179909 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Λέξεις-κλειδιά: 
kbctrl kbhowto kbtabctrl kbmt KB179909 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της 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