⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabctrl.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// TabCtrl.cpp : implementation file//#include "stdafx.h"#include "Fusion.h"#include "TabCtrl.h"#include "MemDC.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// RxTabCtrlRxTabCtrl::RxTabCtrl(){	m_nSide				= TC_SIDE_TOP;	m_crBack			= RGB(158,154,153);	m_crTabFace			= RGB(178,174,173);	m_crTabBack			= RGB(138,134,133);	m_crGuideN			= RGB(  0,  0,  0);	m_crGuideS			= RGB( 98, 98, 98);	m_nLeftMargin		= 10;	m_nTabWingSize		=  8;	m_nTabWidth			= 65;	m_nTabHeight		= 18;	m_bScrollShow		= FALSE;	m_nScrollPos		= 0;	m_nCurTab			= -1;	m_nOldHitTest		= -1;}RxTabCtrl::~RxTabCtrl(){	m_ArrayTabText.RemoveAll();	if(m_hWnd)			DestroyWindow();}BEGIN_MESSAGE_MAP(RxTabCtrl, CWnd)	//{{AFX_MSG_MAP(RxTabCtrl)	ON_WM_ERASEBKGND()	ON_WM_LBUTTONDOWN()	ON_WM_LBUTTONUP()	ON_WM_SIZE()	ON_WM_LBUTTONDBLCLK()	//}}AFX_MSG_MAP	ON_MESSAGE_VOID(WM_INITIALUPDATE,		OnInitialUpdate)    ON_MESSAGE(WM_SETFONT,					OnSetFont)    ON_MESSAGE(WM_GETFONT,					OnGetFont)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxTabCtrl message handlersvoid RxTabCtrl::OnInitialUpdate(){}LRESULT RxTabCtrl::OnGetFont(WPARAM wParam, LPARAM lParam){    return (LRESULT)m_font.m_hObject;}LRESULT RxTabCtrl::OnSetFont(WPARAM wParam, LPARAM lParam){	LRESULT lResult = Default();	CFont *pFont = CFont::FromHandle((HFONT)wParam);	if(pFont)	{		LOGFONT lf;		pFont->GetLogFont(&lf);		m_font.DeleteObject();		m_font.CreateFontIndirect(&lf);	}	return lResult;}BOOL RxTabCtrl::OnEraseBkgnd	(CDC* pDC) {	RxMemDC	dc(pDC);		CRect	rcClient;	GetClientRect(rcClient);	CBrush	brush, *pOldBrush;	brush.CreateSolidBrush(m_crBack);	pOldBrush = dc.SelectObject(&brush);	dc.PatBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), PATCOPY);	dc.SelectObject(pOldBrush);	brush.DeleteObject();	CPen	pen, *pOldPen;	pen.CreatePen(PS_SOLID, 1, m_crGuideS);	pOldPen = dc.SelectObject(&pen);	if(m_nSide == TC_SIDE_TOP)	{	dc.MoveTo(rcClient.left,	rcClient.bottom-1);	dc.LineTo(rcClient.right,	rcClient.bottom-1);	}	else if(m_nSide == TC_SIDE_BOTTOM)	{	dc.MoveTo(rcClient.left,	rcClient.top);		dc.LineTo(rcClient.right,	rcClient.top);		}	else if(m_nSide == TC_SIDE_LEFT)	{	dc.MoveTo(rcClient.right-1, rcClient.top);		dc.LineTo(rcClient.right-1, rcClient.bottom);	}	else if(m_nSide == TC_SIDE_RIGHT)	{	dc.MoveTo(rcClient.left,	rcClient.top);		dc.LineTo(rcClient.left,	rcClient.bottom);	}	dc.SelectObject(pOldPen);	pen.DeleteObject();	dc.SetViewportOrg(0, m_nScrollPos);	int		nTabCount = m_ArrayTabText.GetSize();	if(m_nSide == TC_SIDE_TOP || m_nSide == TC_SIDE_BOTTOM)	{		for(int i = 0; i < nTabCount; i++)		{			if(m_nCurTab == i)		continue;			DrawTabHorz(&dc, i);		}		if(m_nCurTab > -1)			DrawTabHorz(&dc, m_nCurTab);	}	else	{		for(int i = 0; i < nTabCount; i++)		{			if(m_nCurTab == i)		continue;			DrawTabVert(&dc, i);		}		if(m_nCurTab > -1)			DrawTabVert(&dc, m_nCurTab);	}	dc.SetViewportOrg(0, 0);	if(m_bScrollShow)	{		if(m_nSide == TC_SIDE_TOP || m_nSide == TC_SIDE_BOTTOM)			DrawArrowHorz(&dc, CRect(0,0,0,0), m_nOldHitTest);		else if(m_nSide == TC_SIDE_LEFT)			DrawArrowVert(&dc, CRect(rcClient.right-m_nTabHeight, rcClient.bottom-m_nTabHeight*2,							rcClient.right, rcClient.bottom), m_nOldHitTest);		else if(m_nSide == TC_SIDE_RIGHT)			DrawArrowVert(&dc, CRect(rcClient.left, rcClient.bottom-m_nTabHeight*2,							rcClient.left+m_nTabHeight, rcClient.bottom), m_nOldHitTest);	}	return TRUE;}void RxTabCtrl::DrawTabHorz		(CDC *pDC, int nIndex){	CPen		penGuideN, penGuideS, *pOldPen;	penGuideN.CreatePen(PS_SOLID, 1, m_crGuideN);	penGuideS.CreatePen(PS_SOLID, 1, m_crGuideS);	CBrush		brFace, brBack, *pOldBrush;	brFace.CreateSolidBrush(m_crTabFace);	brBack.CreateSolidBrush(m_crTabBack);	int			nPtTemp[4];	POINT		pPoint[4];	GetTabRegion(nIndex, pPoint);	pDC->BeginPath();		pDC->MoveTo(pPoint[0].x, pPoint[0].y);		pDC->LineTo(pPoint[1].x, pPoint[1].y);		pDC->LineTo(pPoint[2].x, pPoint[2].y);		pDC->LineTo(pPoint[3].x, pPoint[3].y);	pDC->EndPath();	CRect		rcTemp;	CString		strText		= m_ArrayTabText.GetAt(nIndex);	CFont		*pOldFont	= pDC->SelectObject(GetFont());	pDC->SetBkMode(TRANSPARENT);	if(nIndex == m_nCurTab)	{		pOldBrush	= pDC->SelectObject(&brFace);		pDC->FillPath();		if(m_nSide == TC_SIDE_TOP)		{	nPtTemp[0] = pPoint[0].y-1;		nPtTemp[3] = pPoint[3].y-1;	}		else		{	nPtTemp[0] = pPoint[0].y;		nPtTemp[3] = pPoint[3].y;	}		if(m_nSide == TC_SIDE_BOTTOM)		{	nPtTemp[1] = pPoint[1].y-1;		nPtTemp[2] = pPoint[2].y-1;	}		else		{	nPtTemp[1] = pPoint[1].y;		nPtTemp[2] = pPoint[2].y;	}		pOldPen		= pDC->SelectObject(&penGuideS);		pDC->MoveTo(pPoint[0].x, nPtTemp[0]);		pDC->LineTo(pPoint[1].x, nPtTemp[1]);		pDC->LineTo(pPoint[2].x, nPtTemp[2]);		pDC->LineTo(pPoint[3].x, nPtTemp[3]);				if(m_nSide == TC_SIDE_TOP)			rcTemp.SetRect(pPoint[0].x, pPoint[1].y, pPoint[3].x, pPoint[3].y);		else			rcTemp.SetRect(pPoint[0].x, pPoint[0].y, pPoint[3].x, pPoint[2].y);		rcTemp.OffsetRect(0,  1);		pDC->SetTextColor(RGB(228,228,228));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		rcTemp.OffsetRect(0, -1);		pDC->SetTextColor(RGB(  0,  0,  0));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		pDC->SelectObject(pOldBrush);		pDC->SelectObject(pOldPen);	}	else	{		pOldBrush	= pDC->SelectObject(&brBack);		pDC->FillPath();		if(m_nSide == TC_SIDE_TOP)		{	nPtTemp[0] = pPoint[0].y-1;		nPtTemp[3] = pPoint[3].y-1;	}		else		{	nPtTemp[0] = pPoint[0].y;		nPtTemp[3] = pPoint[3].y;	}		if(m_nSide == TC_SIDE_BOTTOM)		{	nPtTemp[1] = pPoint[1].y-1;		nPtTemp[2] = pPoint[2].y-1;	}		else		{	nPtTemp[1] = pPoint[1].y;		nPtTemp[2] = pPoint[2].y;	}		pOldPen		= pDC->SelectObject(&penGuideN);		pDC->MoveTo(pPoint[0].x, nPtTemp[0]);		pDC->LineTo(pPoint[1].x, nPtTemp[1]);		pDC->LineTo(pPoint[2].x, nPtTemp[2]);		pDC->LineTo(pPoint[3].x, nPtTemp[3]);				pDC->SelectObject(&penGuideS);		pDC->MoveTo(pPoint[0].x, nPtTemp[0]);		pDC->LineTo(pPoint[3].x, nPtTemp[3]);		if(m_nSide == TC_SIDE_TOP)			rcTemp.SetRect(pPoint[0].x, pPoint[1].y, pPoint[3].x, pPoint[3].y);		else			rcTemp.SetRect(pPoint[0].x, pPoint[0].y, pPoint[3].x, pPoint[2].y);		pDC->SetTextColor(RGB(198,198,198));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		pDC->SelectObject(pOldBrush);		pDC->SelectObject(pOldPen);	}	pDC->SelectObject(pOldFont);	penGuideN.DeleteObject();	penGuideS.DeleteObject();	brFace.DeleteObject();	brBack.DeleteObject();}void RxTabCtrl::DrawTabVert		(CDC *pDC, int nIndex){	CPen		penGuideN, penGuideS, *pOldPen;	penGuideN.CreatePen(PS_SOLID, 1, m_crGuideN);	penGuideS.CreatePen(PS_SOLID, 1, m_crGuideS);	CBrush		brFace, brBack, *pOldBrush;	brFace.CreateSolidBrush(m_crTabFace);	brBack.CreateSolidBrush(m_crTabBack);	int			nPtTemp[4];	POINT		pPoint[4];	GetTabRegion(nIndex, pPoint);	pDC->BeginPath();		pDC->MoveTo(pPoint[0].x, pPoint[0].y);		pDC->LineTo(pPoint[1].x, pPoint[1].y);		pDC->LineTo(pPoint[2].x, pPoint[2].y);		pDC->LineTo(pPoint[3].x, pPoint[3].y);	pDC->EndPath();	CRect		rcTemp;	CString		strText		= m_ArrayTabText.GetAt(nIndex);	CFont		*pOldFont	= pDC->SelectObject(GetFont());	pDC->SetBkMode(TRANSPARENT);	if(nIndex == m_nCurTab)	{		pOldBrush	= pDC->SelectObject(&brFace);		pDC->FillPath();		if(m_nSide == TC_SIDE_LEFT)		{	nPtTemp[0] = pPoint[0].x-1;		nPtTemp[3] = pPoint[3].x-1;	}		else		{	nPtTemp[0] = pPoint[0].x;		nPtTemp[3] = pPoint[3].x;	}		if(m_nSide == TC_SIDE_RIGHT)		{	nPtTemp[1] = pPoint[1].x-1;		nPtTemp[2] = pPoint[2].x-1;	}		else		{	nPtTemp[1] = pPoint[1].x;		nPtTemp[2] = pPoint[2].x;	}		pOldPen		= pDC->SelectObject(&penGuideS);		pDC->MoveTo(nPtTemp[0], pPoint[0].y);		pDC->LineTo(nPtTemp[1], pPoint[1].y);		pDC->LineTo(nPtTemp[2], pPoint[2].y);		pDC->LineTo(nPtTemp[3], pPoint[3].y);				if(m_nSide == TC_SIDE_LEFT)			rcTemp.SetRect(pPoint[1].x, pPoint[0].y, pPoint[0].x, pPoint[3].y);		else			rcTemp.SetRect(pPoint[0].x, pPoint[0].y, pPoint[1].x, pPoint[3].y);		pDC->SetTextColor(RGB(255,255,255));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		rcTemp.OffsetRect(0, -1);		pDC->SetTextColor(RGB(  0,  0,  0));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		pDC->SelectObject(pOldBrush);		pDC->SelectObject(pOldPen);	}	else	{		pOldBrush	= pDC->SelectObject(&brBack);		pDC->FillPath();		if(m_nSide == TC_SIDE_LEFT)		{	nPtTemp[0] = pPoint[0].x-1;		nPtTemp[3] = pPoint[3].x-1;	}		else		{	nPtTemp[0] = pPoint[0].x;		nPtTemp[3] = pPoint[3].x;	}		if(m_nSide == TC_SIDE_RIGHT)		{	nPtTemp[1] = pPoint[1].x-1;		nPtTemp[2] = pPoint[2].x-1;	}		else		{	nPtTemp[1] = pPoint[1].x;		nPtTemp[2] = pPoint[2].x;	}		pOldPen		= pDC->SelectObject(&penGuideN);		pDC->MoveTo(nPtTemp[0], pPoint[0].y);		pDC->LineTo(nPtTemp[1], pPoint[1].y);		pDC->LineTo(nPtTemp[2], pPoint[2].y);		pDC->LineTo(nPtTemp[3], pPoint[3].y);				pDC->SelectObject(&penGuideS);		pDC->MoveTo(nPtTemp[0], pPoint[0].y);		pDC->LineTo(nPtTemp[3], pPoint[3].y);		if(m_nSide == TC_SIDE_LEFT)			rcTemp.SetRect(pPoint[1].x, pPoint[0].y, pPoint[0].x, pPoint[3].y);		else			rcTemp.SetRect(pPoint[0].x, pPoint[0].y, pPoint[1].x, pPoint[3].y);		pDC->SetTextColor(RGB(228,228,228));		pDC->DrawText(strText, rcTemp, DT_SINGLELINE|DT_VCENTER|DT_CENTER);		pDC->SelectObject(pOldBrush);		pDC->SelectObject(pOldPen);	}	pDC->SelectObject(pOldFont);	penGuideN.DeleteObject();	penGuideS.DeleteObject();	brFace.DeleteObject();	brBack.DeleteObject();}void RxTabCtrl::DrawArrowHorz(CDC *pDC, CRect rect, int nCheck){	// fill the background	CBrush	brush, *pOldBrush;	brush.CreateSolidBrush(m_crBack);	pOldBrush = pDC->SelectObject(&brush);	pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);	pDC->SelectObject(pOldBrush);	brush.DeleteObject();	// draw  border	CRect	rcUp, rcDown;	rcUp.SetRect  (rect.left, rect.top, rect.right, rect.CenterPoint().y);	rcDown.SetRect(rect.left, rect.CenterPoint().y, rect.right, rect.bottom);	pDC->Draw3dRect(rcUp,   m_crGuideN, m_crGuideN);	pDC->Draw3dRect(rcDown, m_crGuideN, m_crGuideN);	rcUp.DeflateRect(1,1,1,1);	rcDown.DeflateRect(1,1,1,1);	if(nCheck == TC_SCROLL_UP)	{		rcUp.OffsetRect(1,1);		pDC->Draw3dRect(rcDown, RGB(255,255,255), RGB( 68, 68, 68));	}	else if(nCheck == TC_SCROLL_DOWN)	{		rcDown.OffsetRect(1,1);		pDC->Draw3dRect(rcUp,   RGB(255,255,255), RGB( 68, 68, 68));	}	else	{		pDC->Draw3dRect(rcDown, RGB(255,255,255), RGB( 68, 68, 68));		pDC->Draw3dRect(rcUp,   RGB(255,255,255), RGB( 68, 68, 68));	}	// draw left arrow	int		nArrowHeight = rcUp.Width() / 3;	POINT	pPoint[3];	pPoint[0].x = rcUp.left+nArrowHeight*2;				pPoint[0].y = rcUp.CenterPoint().y-nArrowHeight;	pPoint[1].x = rcUp.left+nArrowHeight*2;				pPoint[1].y = rcUp.CenterPoint().y-nArrowHeight;	pPoint[2].x = rcUp.left+nArrowHeight;				pPoint[2].y = rcUp.CenterPoint().y;	DrawArrow(pDC, pPoint, RGB(255,  0,  0));	// draw right arrow	pPoint[0].x = rcUp.left+nArrowHeight;				pPoint[0].y = rcUp.CenterPoint().y-nArrowHeight;	pPoint[1].x = rcUp.left+nArrowHeight;				pPoint[1].y = rcUp.CenterPoint().y-nArrowHeight;	pPoint[2].x = rcUp.left+nArrowHeight*2;				pPoint[2].y = rcUp.CenterPoint().y;	DrawArrow(pDC, pPoint, RGB(255,  0,  0));}void RxTabCtrl::DrawArrowVert(CDC *pDC, CRect rect, int nCheck){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -