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));//修改选中背景颜色
响应WM_PAINT消息 在里面绘制即可,并不复杂的
int nTab= GetItemCount();
int nSel = GetCurSel();
if (!nTab) // no pages added
return 0;
CRect rcItem;
while(nTab--)
{
GetItemRect(nTab,&rcItem);
//在此绘制标签文本背景等
}
{
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));
}
}
}这是我修改后的代码
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::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);
}
}