336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
MFC Tab Control Color Change #2
Change Tab Selector? Color
override DrawItem function
void CMainTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
COLORREF m_select_border_color = RGB(255, 255, 255);
COLORREF m_select_text_color = RGB(10, 155, 202);
COLORREF m_unselect_border_color = RGB(255, 255, 255);
COLORREF m_unselect_text_color = RGB(0, 0, 0);
int select_index = lpDrawItemStruct->itemID;
if (select_index < 0) return;
char tab_text[40];
TC_ITEM data;
data.mask = TCIF_TEXT | TCIF_IMAGE;
data.pszText = tab_text;
data.cchTextMax = 39;
// 선택된 탭의 정보를 얻는다.
if (!GetItem(select_index, &data)) return;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rect = lpDrawItemStruct->rcItem;
// Tab이 그려진 테두리의 두께만큼 위치를 보정한다.
rect.top += ::GetSystemMetrics(SM_CYEDGE);
pDC->SetBkMode(TRANSPARENT);
// 탭이 선택된 정보에 따라 배경색을 칠해준다.
if (select_index == GetCurSel()) pDC->FillSolidRect(rect, m_select_border_color);
else pDC->FillSolidRect(rect, m_unselect_border_color);
// 이미지를 출력한다.
CImageList *p_image_list = GetImageList();
if (p_image_list != NULL && data.iImage >= 0) {
rect.left += pDC->GetTextExtent(" ").cx;
IMAGEINFO image_info;
p_image_list->GetImageInfo(data.iImage, &image_info);
CRect image_rect(image_info.rcImage);
p_image_list->Draw(pDC, data.iImage, CPoint(rect.left, rect.top), ILD_TRANSPARENT);
rect.left += image_rect.Width();
}
CFont *p_old_font = NULL;
if (select_index == GetCurSel()){
// 선택된 탭이라면...
pDC->SetTextColor(m_select_text_color);
// 텍스트의 위치를 보정하여 선택된 느낌이 강조되도록 만든다.
rect.top -= ::GetSystemMetrics(SM_CYEDGE);
pDC->DrawText(tab_text, rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
}
else {
// 선택되지 않은 탭이라면...
pDC->SetTextColor(m_unselect_text_color);
pDC->DrawText(tab_text, rect, DT_SINGLELINE | DT_BOTTOM | DT_CENTER);
}
pDC->SelectObject(p_old_font);
}
그리고
DrawItem 이벤트를 발생시키기 위하여
Dialog 에서
m_TabCtrl.ModifyStyle(0, TCS_OWNERDRAWFIXED);
를 불러 주어야 한다.