ViewTabCtrl.cpp
资源名称:TabSample.rar [点击查看]
上传用户:sz86035077
上传日期:2013-02-27
资源大小:40k
文件大小:4k
源码类别:
Tab控件
开发平台:
Visual C++
- // ViewTabCtrl.cpp : implementation file
- //
- #include "stdafx.h"
- #include "Tab.h"
- #include "ViewTabCtrl.h"
- #include "TabCtrlView.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CViewTabCtrl
- #define CX_BORDER 1
- #define CY_BORDER 1
- #define MAX_COLORS 3
- COLORREF g_colorRef[MAX_COLORS] =
- {
- RGB(0,225,255),
- RGB(0,240,190),
- RGB(128,128,255),
- /*RGB(240,200,175),
- RGB(240,240,150),
- RGB(175,130,175),
- RGB(240,140,0),
- RGB(255,200,0),
- RGB(255,160,120),
- RGB(255,200, 175)*/
- };
- CViewTabCtrl::CViewTabCtrl()
- {
- m_strSelfont = _T("华文行楷"); //此处是设置标签上的字体的名称,m_strSelfont是选中时的字体名称,
- m_strGrayfont= _T("宋体"); //m_strGrayfont是变灰时的字体名称。
- }
- CViewTabCtrl::~CViewTabCtrl()
- {
- }
- BEGIN_MESSAGE_MAP(CViewTabCtrl, CTabCtrl)
- //{{AFX_MSG_MAP(CViewTabCtrl)
- ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CViewTabCtrl message handlers
- void CViewTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
- {
- int nsel = lpDrawItemStruct->itemID;
- ASSERT(nsel > -1);
- ASSERT(nsel < GetItemCount());
- TC_ITEM item;
- char text[255];
- memset(text,0,255);
- switch(nsel)
- {
- case 0:
- strcpy(text, "下载");
- break;
- case 1:
- strcpy(text, "代理服务器");
- break;
- case 2:
- strcpy(text, "站点探测器");
- break;
- default:
- break;
- }
- item.pszText = text;
- item.mask = TCIF_TEXT;
- GetItem(nsel, &item);
- if(!m_dc.Attach(lpDrawItemStruct->hDC))
- return;
- CRect rect = CRect(&(lpDrawItemStruct->rcItem));
- rect.NormalizeRect(); //使CRect正常化,即宽度和高度都是正的。sunxin
- rect.DeflateRect(CX_BORDER, CY_BORDER); //是矩形的左上角的left和top增加1,
- //矩形的右下角的right和bottom减少1,也就是宽度和高度都减2,因为CX_BORDER和
- //CY_BORDER定义为1。
- //当每一个标签需要被绘制的时候,标签控件都会发送WM_DRAWITEM。
- //在MFC中,调用DrawItem这个函数。为每一个标签定义一种颜色的画刷。sunixn
- CBrush brush(g_colorRef[nsel - (nsel / MAX_COLORS) * MAX_COLORS]);
- m_dc.FillRect(rect, &brush);
- COLORREF tcolor;
- if (nsel == GetCurSel())
- {
- m_selFont.DeleteObject();
- m_selFont.CreatePointFont(100, LPCTSTR(m_strSelfont), &m_dc);
- m_dc.SelectObject(m_selFont);
- tcolor = RGB(0,0,0);
- }
- else
- {
- m_selFont.DeleteObject();
- m_selFont.CreatePointFont(80, LPCTSTR(m_strGrayfont), &m_dc);
- m_dc.SelectObject(m_selFont);
- //GetSysColor得到当前指定显示元素的颜色。显示元素可以是窗口的
- //一部分。sunxin
- tcolor = GetSysColor(COLOR_3DSHADOW);
- }
- m_dc.SetBkMode(TRANSPARENT);
- m_dc.SetTextColor(tcolor);
- m_dc.DrawText(text, rect, DT_VCENTER|DT_CENTER);
- m_dc.Detach();
- return;
- }
- void CViewTabCtrl::RecalcLayout(CRect &rect, CWnd *pWnd)
- {
- SetWindowPos(NULL, rect.left, rect.top, rect.right - rect.left,
- rect.bottom - rect.top, SWP_NOZORDER);
- //调用AdjustRect函数来计算一个标签控件的显示区域(通过传递一个窗口矩形,
- //第一个参数为FALSE),或者计算一个窗口区域(通过传递一个给定的显示区域,
- //第一个参数为TRUE)。sunxin
- AdjustRect(FALSE, &rect);
- pWnd->SetWindowPos(NULL, rect.left, rect.top, rect.right - rect.left,
- rect.bottom - rect.top, SWP_NOZORDER);
- }
- void CViewTabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
- {
- // TODO: Add your control notification handler code here
- int nsel = GetCurSel();
- HandleTabs(nsel);
- *pResult = 0;//这句代码是MFC自动添加。sunxin
- }
- BOOL CViewTabCtrl::HandleTabs(int sel)
- {
- return m_pView->HandleTabs(sel);
- }
- void CViewTabCtrl::SetView(CTabCtrlView *pView)
- {
- m_pView=pView;
- }