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

Σύνοψη

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

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

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


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


Τα ακόλουθα #defines χρησιμοποιούνται στο δείγμα:

        #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 προέρχεται σας χρησιμοποιώντας τον Οδηγό κλάσης και προσθέστε τον ακόλουθο κώδικα, αλλάζοντας τα ονόματα μεταβλητών, ανάλογα με τις ανάγκες. Είναι σημαντικό να σημειωθεί ότι απαιτείται ένας δείκτης προς ένα αντικείμενο ΚΠΕ από τον δείκτη χειρισμού στον ελεγκτή Τομέα που διαβιβάστηκε μέσω της 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 - Τελευταία αναθεώρηση: 10 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια