Shay050799
asked on
CTabCtrl
Hi All,
i have a tab control, and i want to change the color of the selected item, either the text of the backgound of the text.
i did the following:
InsertItem(0,"Tab Name");
now everytime the user click on a tab, i want the text of the selected one to change its color and font size, i m changing the text like this:
TCITEM tabItem;
tabItem.mask = TCIF_TEXT ;
abItem.pszText = "New Text";
SetItem(m_tabCurrent,&tabI tem);
but how can i change the color ?
thanks \
shay
i have a tab control, and i want to change the color of the selected item, either the text of the backgound of the text.
i did the following:
InsertItem(0,"Tab Name");
now everytime the user click on a tab, i want the text of the selected one to change its color and font size, i m changing the text like this:
TCITEM tabItem;
tabItem.mask = TCIF_TEXT ;
abItem.pszText = "New Text";
SetItem(m_tabCurrent,&tabI
but how can i change the color ?
thanks \
shay
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
my OnItemDraw function, never gets called ?????
shay
shay
ASKER
i m using CFormView with a CTabCtrl on it, not cpropertypages !!!
Shay
Shay
Hi Shay,
Notice to HOWTO: Change the Text Color of the Selected Property Sheet Tab. Remember:
1. Go to Tab Control Properties of your tab control->Styles tab->Check "Owner draw fixed" check box to make your DrawItem function active
2. Just create CMyTabCtrl class as instruction, you needn't create CMyPropertySheet
3. Declare virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS) in CMyTabCtrl class
Now, use CMyTabCtrl instead of CTabCtrl in your application
Notice to HOWTO: Change the Text Color of the Selected Property Sheet Tab. Remember:
1. Go to Tab Control Properties of your tab control->Styles tab->Check "Owner draw fixed" check box to make your DrawItem function active
2. Just create CMyTabCtrl class as instruction, you needn't create CMyPropertySheet
3. Declare virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS) in CMyTabCtrl class
Now, use CMyTabCtrl instead of CTabCtrl in your application
ASKER
i m not using property sheets at all !!!!
i m using CTabCtrl on CDialog !!
Shay
i m using CTabCtrl on CDialog !!
Shay
Hi Shay,
Have you read my comment carefully?
You needn't create CMyPropertySheet.
You just need create CMyTabCtrl as in article. Check "Owner draw fixed" check box in Tab Control Properties to active DrawItem function. Then use CMyTabCtrl instead of CTabCtrl. Cheers!
Have you read my comment carefully?
You needn't create CMyPropertySheet.
You just need create CMyTabCtrl as in article. Check "Owner draw fixed" check box in Tab Control Properties to active DrawItem function. Then use CMyTabCtrl instead of CTabCtrl. Cheers!
Have you done it, Shay?
ASKER
sorry i was a way !!!
it works great, aparently i need to call OnDrawItem on the dialog, its works great thanks buddy
Shay
it works great, aparently i need to call OnDrawItem on the dialog, its works great thanks buddy
Shay
Cheers!
HOWTO: Change the Background Color of a Tab Control
Q179909
--------------------------
The information in this article applies to:
Microsoft Windows Software Development Kit (SDK)
Microsoft Visual Studio 97
--------------------------
SUMMARY
This article demonstrates how to change the background color of each tab in a Tab control. It assumes that you have a dialog box and have selected and sized a Tab control into the dialog using the Resource Editor.
MORE INFORMATION
To change the background color of each tab you must make the Tab control owner draw and use the FillRect() method to fill the rectangle area of the tab itself with a brush that you create and call the SetBkColor() method before you make a call to the TextOut() method with the text you want to appear on the tab.
First bring up the properties for the tab control in the Resource Editor and select the Styles tab. Select the "Owner draw fixed" check box and save your work. If you are dynamically creating the Tab control during the dialog box's initialization with CreateWindow() or CreateWindowEx() be sure to include the TCS_OWNERDRAWFIXED bit in the dwStyle parameter.
The following #defines are used in the sample:
#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)
If You Are Using the SDK
The brushes in this sample excerpt were created in WM_INITDIALOG and are static handles.
Add the WM_DRAWITEM message to the dialog box's procedure.
Sample Code
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;
If Your Are Using MFC
The brushes referred to are part of the dialog class and were created when the dialog constructor was called.
Override the OnDrawItem() method for your CDialog derived class using Class Wizard and add the following code, changing variable names as neccessary. It is important to note that a pointer to a CDC object from the handle of the DC passed in via the LPDRAWITEMSTRUCT is required, otherwise only the background of the text will be the desired color.
Sample Code
void CMFCTabCtrlDlg::OnDrawItem
{
CDialog::OnDrawItem(nIDCtl
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->i
CDC *dc = CDC::FromHandle(lpdis->hDC
dc->FillRect(&lpdis->rcIte
dc->SetBkColor(bkColor);
TextOut(lpdis->hDC,
lpdis->rcItem.left,
lpdis->rcItem.top,
tci.pszText,
lstrlen(tci.pszText));
}
}
Additional query words:
Keywords : kbCtrl kbNTOS kbWinOS2000 kbTabCtrl kbGrpUser kbVS97 kbWinOS
Issue type : kbhowto
Technology : kbvcSearch
Last Reviewed: July 7, 2000
? 2001 Microsoft Corporation. All rights reserved. Terms of Use.
--------------------------
Send feedback to MSDN.Look here for MSDN Online resources.
<MSDN>