关于Tab 控件自绘
请大家赐教。
我想重载 CTabCtrl ,重绘控件的标签,比如改变标签的颜色,图标,形状,主要是形状
想实现上图那样的标签,请大家赐教!
改变标签的形状 是 在 OnPaint() 中实现还是在 Ondrawitem()中实现呢??
如何实现,谢谢大家 !
最好有源代码,我可以学习和参考!
[解决办法]
OnPaint
struct _Item
{
CBitmap bmp;
CString title;
CRect rect;
};
list<_Item*> lst;
在鼠标 移动 和 左键按下 消息中判断 是在那个 _Item 中,然后重绘上边
[解决办法]
DrawItem虚函数中
[解决办法]
一切都是画出来的,圆角不圆角只是效果而已,标签间的间隔也可以实现
[解决办法]
参考我的“Tab内是Dlg.rar”0分
右上有个 按钮 是改 tab 的 自绘风格的
http://download.csdn.net/detail/schlafenhamster/4478966
[解决办法]
下面是 自绘代码。
void CMyTab::OnPaint()
{
if(m_bHeadStyle)
{
CPaintDC dc(this); // device context for painting
//
char szTabText[40];
memset(szTabText, '\0', sizeof(szTabText));
// light blue
CRect rc;
GetClientRect(rc);
rc.bottom=22;
dc.FillSolidRect(&rc, RGB(101,174,209));
TC_ITEM tci;
memset(&tci,0,sizeof(tci));
tci.mask = TCIF_TEXT
[解决办法]
TCIF_STATE;
tci.dwStateMask= TCIS_BUTTONPRESSED;
tci.pszText = szTabText;
tci.cchTextMax = sizeof(szTabText)-1;
// get item
CRect rcItem;
for(int jj=0;jj<6;jj++)
{
GetItem(jj, &tci);
GetItemRect(jj,&rcItem);
dc.SetBkMode(TRANSPARENT);
if(tci.dwState & TCIS_BUTTONPRESSED) dc.SetTextColor(RGB(255,0,0));
else dc.SetTextColor(RGB(0,0,0));
//
dc.RoundRect(&rcItem,CPoint(10,10));
// Draw text
rcItem.OffsetRect(8,1);
dc.TextOut(rcItem.left,rcItem.top, tci.pszText, lstrlen(tci.pszText));
}
}
else
{
CTabCtrl::OnPaint();// call drawitem
}
}
[解决办法]
其实很多时候,tab页的效果可以使用CButton贴图来实现