Zum Ändern der Hintergrundfarbe eines Register-Steuerelements

Zusammenfassung

Dieser Artikel veranschaulicht das Ändern der Hintergrundfarbe von Registerkarten in einem Registersteuerelement. Es wird davon ausgegangen, dass Sie ein Dialogfeld ausgewählt und ein Registerkarten-Steuerelement in das Dialogfeld mit der Ressourcen-Editor angepasst.

Weitere Informationen

Ändern die Hintergrundfarbe der einzelnen machen Sie müssen die Registerkarte Steuerelementbesitzer zeichnen und mit der Methode FillRect() können die Rechteck-Fläche der Registerkarte mit einem Pinsel erstellen und die SetBkColor()-Methode aufrufen, bevor Sie anrufen soll die TextOut() Methode mit dem Text auf der Registerkarte angezeigt.


Zuerst rufen Sie die Eigenschaften für das Registersteuerelement im Ressourcen-Editor Kontrollkästchen Sie das Formatvorlagen Registerkarte wählen das "Ownerdrawn feste" und speichern Sie Ihre Arbeit. Wenn Sie das Registerkarten-Steuerelement dynamisch während der Initialisierung mit CreateWindow() oder CreateWindowEx() das Dialogfeld erstellen unbedingt DwStyle-Parameter bit TCS_OWNERDRAWFIXED.


Die folgenden #defines im Beispiel verwendet werden:

        #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)

Wenn Sie das SDK verwenden

Pinsel in diesem Beispielauszug erstellt wurden in WM_INITDIALOG und statische behandelt.


Das Dialogfeld Prozedur WM_DRAWITEM Nachricht hinzufügen.

Beispielcode

   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;

Wenn Sie sind mit MFC

Genannten Pinsel sind Teil der Dialogfeldklasse und wurden erstellt, wenn der Dialogfeldkonstruktor aufgerufen wurde.


Überschreiben Sie die OnDrawItem()-Methode für die CDialog abgeleitete Klasse mit Klassen-Assistent und fügen Sie folgenden Code Namen nach Bedarf ändern. Es ist wichtig zu beachten, dass ein Zeiger auf ein CDC-Objekt aus dem Handle des DC über die LPDRAWITEMSTRUCT übergeben muss, andernfalls nur der Hintergrund des Textes die gewünschte Farbe.

Beispielcode

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

Eigenschaften

Artikelnummer: 179909 – Letzte Überarbeitung: 10.01.2017 – Revision: 1

Feedback