16,472
社区成员
发帖
与我相关
我的任务
分享
int nTab= GetItemCount();
int nSel = GetCurSel();
if (!nTab) // no pages added
return 0;
CRect rcItem;
while(nTab--)
{
GetItemRect(nTab,&rcItem);
//在此绘制标签文本背景等
}
void CEnTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpdis)
{
TC_ITEM tci;
CDC* pDC = CDC::FromHandle(lpdis->hDC);
CRect rect(lpdis->rcItem);
char szTabText[256];
memset(szTabText,'\0',sizeof(szTabText));
tci.mask = TCIF_TEXT;
tci.pszText = szTabText;
tci.cchTextMax = sizeof(szTabText) -1;
GetItem(lpdis->itemID, &tci);
if (lpdis->itemAction & ODA_DRAWENTIRE)
{
pDC->TextOut(rect.left+5, rect.top+5, tci.pszText);
}
if ((lpdis->itemState & ODS_SELECTED) &&
(lpdis->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
{
//Make the color of text of the selected tab to be BLUE.
pDC->FillSolidRect(rect,RGB(255,255,255));//修改选中背景颜色
pDC->SetTextColor(RGB(0,0,0)); //修改该选中文字颜色
pDC->TextOut(rect.left+5, rect.top+5, tci.pszText);
}
}
CPaintDC dc(this);
int nTab= GetItemCount();
int nSel = GetCurSel();
CRect rcItem;
while(nTab--)
{
GetItemRect(nTab,&rcItem);
if (nSel==0)
{
dc.SetTextColor(RGB(255,255,255));
}
}
LRESULT CTabCtrlEx::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CRect rect;
GetClientRect(&rect);
CPaintDC dc(m_hWnd);
CMemoryDC MemDC(dc, rect);
CBrush br;
br.CreateSolidBrush(RGB(227,230,235));
MemDC.FillRect(&rect,br);
int nTab;
int nItemCount = GetItemCount();
int nSel = GetCurSel();
nTab = nItemCount;
if (!nTab) // no pages added
return 0;
CRect rcItem;
CRect rectTemp;
CString strItem;
TCITEM tcItem;
tcItem.pszText = strItem.GetBuffer(1024);
tcItem.cchTextMax = 1023;
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(157,177,186));
MemDC.SelectPen(pen);
while(nTab--)
{
memset(tcItem.pszText,0,1024*2);
GetItemRect(nTab,&rcItem);
if (nTab==nSel)
{
rcItem.InflateRect(0,3,0,0);
}
rectTemp = rcItem;
rectTemp.DeflateRect(1,1);
if (nTab ==nSel)
{
MemDC.FillSolidRect(&rectTemp,RGB(227,230,235));
}
else
{
MemDC.Rectangle(&rcItem);
MemDC.FillSolidRect(&rectTemp,RGB(255,255,255));
}
CPoint point;
GetCursorPos(&point);
ScreenToClient(&point);
if (rcItem.PtInRect(point)||(nTab ==nSel)) // 鼠标在标签或者标签被选中,高亮显示
{
rectTemp = rcItem;
rectTemp.bottom=rectTemp.top+3;
MemDC.FillSolidRect(&rectTemp,RGB(255,200,60));
}
CFont font;
font.CreateFont(12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
CMainFrame::get_string(IDS_ITEM_NAME_DEF_FONT));
MemDC.SelectFont(font);
MemDC.SetBkMode(TRANSPARENT);
tcItem.mask = TCIF_TEXT;
GetItem(nTab,&tcItem);
strItem.Format(_T("%s"),tcItem.pszText);
MemDC.DrawText(strItem,strItem.GetLength(),&rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
if (nTab==nItemCount-1)
{
MemDC.MoveTo(rcItem.right,rcItem.bottom);
MemDC.LineTo(rect.right,rcItem.bottom);
}
}
return 0;
}
void CEnTabCtrl::onPaint()
{
CPaintDC dc(this);
int nTab= GetItemCount();
int nSel = GetCurSel();
CRect rcItem;
while(nTab--)
{
GetItemRect(nTab,&rcItem);
if (nSel==0)
{
dc.SetTextColor(RGB(255,255,255));
}
}
}
这是我修改后的代码