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);
를 불러 주어야 한다.
'Programming > MFC' 카테고리의 다른 글
| MFC Control Color Change (0) | 2016.10.19 |
|---|---|
| MFC Bitmap Button (0) | 2016.10.18 |
| MFC Tab Control Color Change #1 (1) | 2016.10.18 |
| LINK : warning LNK4098: 'LIBCMT' defaultlib가 다른 라이브러리와 충돌합니다. /NODEFAULTLIB:library를 사용하십시오. (0) | 2016.10.06 |
| 공유 DLL에서 MFC 사용 VS 정적 라이브러리에서 MFC 사용 (0) | 2016.10.06 |


.jpeg?f=255&MSPPError=-2147217396)
.jpeg?f=255&MSPPError=-2147217396)
.jpeg?f=255&MSPPError=-2147217396)
.jpeg?f=255&MSPPError=-2147217396)
.jpeg?f=255&MSPPError=-2147217396)