Jak změnit barvu pozadí ovládacího prvku karta

Souhrn

Tento článek ukazuje, jak změnit barvu pozadí na každé kartě v ovládacím prvku karta. Předpokládá se, že jste dialogové okno a vybrali jste a velikosti ovládacího prvku karta do dialogového okna pomocí editoru prostředků.

Další informace

Chcete-li změnit barvu pozadí pro každou kartu, kterou je třeba provést na kartě řízení vlastníka kreslit a pomocí FillRect() metody k vyplnění oblasti obdélník štětcem, vytvoření a volání SetBkColor() metoda před provedením volání samotné karty TextOut() způsob s textem, který chcete zobrazit na kartě.


Nejprve zobrazte vlastnosti ovládacího prvku karta v editoru prostředků a styly kartu Vybrat "vlastník kreslení dlouhodobého" zaškrtněte políčko a uložte svou práci. Chcete-li dynamicky vytvořit ovládací prvek karta během inicializace pole dialogové okno s CreateWindow() nebo CreateWindowEx() nezapomeňte zahrnout TCS_OWNERDRAWFIXED bit v parametru dwStyle.


Následující #defines se používají ve vzorku:

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

Pokud používáte sadu SDK

Stopy v tomto výpise vzorku byly vytvořeny WM_INITDIALOG a jsou statické úchyty.


Přidáte zprávy WM_DRAWITEM postup pole dialogového okna.

Ukázkový kód

   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;

Pokud jste pomocí knihovny MFC

Stopy uvedené jsou součástí třídy dialogové okno a byly vytvořeny, když byla volána konstruktoru dialogové okno.


Přepište metodu OnDrawItem() pro vaší CDialog odvozené třídy pomocí Průvodce třídy a přidejte následující kód, názvy proměnných měnit podle potřeby. Je důležité si uvědomit, že ukazatel CSP objekt z popisovače řadiče domény předaný prostřednictvím LPDRAWITEMSTRUCT je požadováno, jinak bude v požadovanou barvu pozadí textu.

Ukázkový kód

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

Vlastnosti

ID článku: 179909 - Poslední kontrola: 10. 1. 2017 - Revize: 1

Váš názor