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

📄 guitabbed.cpp

📁 这是一个串口监视程序
💻 CPP
字号:
//-----------------------------------------------------------------------//
// This is a part of the GuiLib MFC Extention.							 //	
// Autor  :  Francisco Campos											 //
// (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
// This code is provided "as is", with absolutely no warranty expressed  //
// or implied. Any use is at your own risk.								 //		
// You must obtain the author's consent before you can include this code //
// in a software library.												 //
// If the source code in  this file is used in any application			 //
// then acknowledgement must be made to the author of this program		 //	
// fco_campos@tutopia.com												 //
// version : 1.1														 //
// Modified by : Francisco Campos										 //
//-----------------------------------------------------------------------//

#include "stdafx.h"
#include "..\header\guitabbed.h"
#include "..\header\GuiBaseTab.h"
#include "..\header\guitabbed.h"
#define SCROLLCLOSE 0x886
#define SCROLLLEFT  0x887
#define SCROLLRIGHT 0x888


BEGIN_MESSAGE_MAP(GuiTabbedButton, CGuiNormalButton)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_TIMER()
END_MESSAGE_MAP()


GuiTabbedButton::GuiTabbedButton()
{
	bPress=FALSE;
}

GuiTabbedButton::~GuiTabbedButton()
{

}

void GuiTabbedButton::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
	if (!bPress) return;
	bPress=FALSE;
	KillTimer(1);
	//CGuiNormalButton::OnLButtonUp(nFlags, point);
}
void GuiTabbedButton::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
	if (bPress) return;
	bPress=TRUE;
	SetTimer(1,50,NULL);
	//CGuiNormalButton::OnLButtonDown(nFlags, point);
}

void GuiTabbedButton::OnTimer(UINT nIDEvent)
{
	// TODO: Add your message handler code here and/or call default
	if (bPress == FALSE) return;
	CRect rc;
	CPoint pt(GetMessagePos());
	ScreenToClient(&pt);
	GetClientRect(rc);
	if (rc.PtInRect(pt))
	{
		CWnd* pParent=GetParent();
		if (IsWindowEnabled())
			pParent->SendMessage(WM_COMMAND,GetDlgCtrlID());
		//bPress=FALSE;
		//KillTimer(1);
	}
	else
	{
		bPress=FALSE;
		KillTimer(1);
		//CGuiNormalButton::OnTimer(nIDEvent);
	}
	
}

CGuiTabbed::CGuiTabbed(void)
{
	m_nDif=0;
}

CGuiTabbed::~CGuiTabbed(void)
{
}



void CGuiTabbed::Drawtabs(CDC* dc)
{
	int m_StrPos=0;
	BOOL m_ViewAlltab=TRUE;
	CRect m_rClient;
	CBrush cbr;
	CPen light(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT));
	CPen Dark(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
	CPen Black(PS_SOLID,1,GetSysColor(BLACK_PEN));	
	CRect rectText;
	CFont* m_fontOld=dc->SelectObject(&m_cfont);
	CSize mszBtn=GetSizeButton();
	int m_iSizeButton=mszBtn.cx;
	m_rectTab.DeflateRect(1,1);
	m_rectTab.bottom+=1;
	cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorTabs());
	dc->FillRect(m_rectTab,&cbr);
	m_rectTab.InflateRect(1,1);
	//m_rectTab.bottom-=1;
	//dc->Draw3dRect(m_rectTab,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorBTNHigh());
	//m_rectTab.bottom+=1;
	CRect rectT=m_rectTab;
	rectT.right-=m_iSizeButton+2;
	int mSizeTotal=m_iMinValRec;
	m_toolBtn[0].EnableWindow(FALSE);
	m_toolBtn[1].EnableWindow(FALSE);
	m_toolBtnC.EnableWindow(FALSE);
	if (mSizeTotal > m_rectTab.Width())
	{
		
		m_toolBtn[1].EnableWindow(TRUE);
		if (m_nDif < 0) 
			m_toolBtn[0].EnableWindow(TRUE);
		if((mSizeTotal-(abs(m_nDif)-20)) < m_rectTab.Width())
			m_toolBtn[1].EnableWindow(FALSE);
	}
	else
		m_nDif=0;
	
	CRect rectScroll; 
	CRgn reg;	
	CRect rectRecorte;
	rectRecorte=rectT;
	reg.CreateRectRgnIndirect(rectRecorte);
	dc->SelectClipRgn(&reg);
	int m_right=m_nDif;
	for ( int iCont=0; iCont< m_Numtabs;iCont++)
	{	

		CGuiTab* ctb=(CGuiTab*)m_pArray[iCont];
		CRect mrt=ctb->rect;		
		int ancho=mrt.Width();
		mrt.left=m_right;
		mrt.right=mrt.left+ancho;
		CPoint Coor[4];
		//si es la carpeta seleccionada, se debe 
		//eliminar las lineas oscuras de encima
		if (iCont ==m_iSelectTab)
		{
			CBrush cbr;
			CRect  m_rectTabAux=mrt;
			cbr.CreateSysColorBrush(COLOR_BTNFACE);
			m_rectTabAux.top+=3;
			m_rectTabAux.bottom+=2;
			dc->FillRect(m_rectTabAux,&cbr);
			dc->SelectObject(&light);
			dc->MoveTo(m_rectTabAux.left,m_rectTabAux.top);
			dc->LineTo(m_rectTabAux.left,m_rectTabAux.bottom);
			//linea de arriba
			dc->MoveTo(m_rectTabAux.left,m_rectTabAux.top);
			dc->LineTo(m_rectTabAux.right,m_rectTabAux.top);
			//linea derecha observe que se pinta dos veces para
			//dar el efecto de redondeada en la puntas

			dc->SelectObject(&Black);
			dc->MoveTo(m_rectTabAux.right-1,m_rectTabAux.top+1);
			dc->LineTo(m_rectTabAux.right-1,m_rectTabAux.bottom);
			dc->SetTextColor(RGB(0,0,0));
			//pDC->TextOut(rCText.left+3,rCText.top,m_caption);

		}
		else
		{
			if ((iCont+1) != m_iSelectTab)
			{
				dc->SelectObject(&Dark);
				dc->MoveTo(mrt.right-1,mrt.top+3);
				dc->LineTo(mrt.right-1,mrt.bottom+1);
				dc->SetTextColor(GuiDrawLayer::GetRGBColorShadow());
			}
				
			
		}
		CRect m_rectTabAux= mrt;
		m_rectTabAux.top+=4;
		m_rectTabAux.left+=4;
		int OldMode=dc->SetBkMode(TRANSPARENT);
		dc->DrawText(ctb->lpMsg,m_rectTabAux,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
		m_right=mrt.right;
		ctb->rect=mrt;
		dc->SetBkMode(OldMode);
	}


	dc->SelectClipRgn(NULL);
	
	CRect rcCli;
	GetClientRect(rcCli);
    rcCli.top=m_rectTab.top;
	rcCli.bottom=m_rectTab.bottom;
	rcCli.left=rcCli.right-(m_iSizeButton);
	int nacum=0;
	for (int i=0; i<3;i++)
	{
		CSize szBtn=m_toolBtn[i].GetSizeButton();
		m_toolBtn[i].MoveWindow(rcCli.left+nacum-1,rcCli.top+2,szBtn.cx,rcCli.Height()-4);
		nacum+=szBtn.cx;
	}
	GetClientRect(rcCli);
	dc->Draw3dRect(rcCli,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorShadow());
	m_toolBtnC.EnableWindow(TRUE);
	
}


BEGIN_MESSAGE_MAP(CGuiTabbed, CGuiTabWnd)
	ON_WM_CREATE()
	ON_COMMAND(SCROLLLEFT,OnScrollLeft)
	ON_COMMAND(SCROLLRIGHT,OnScrollRight)
	ON_COMMAND(SCROLLCLOSE,OnScrollClose)
END_MESSAGE_MAP()

void  CGuiTabbed::OnScrollLeft()
{
	m_nDif+=10;
	CClientDC dc(this);
	Drawtabs(&dc);	
	//RecalLayout();
	
}

void  CGuiTabbed::OnScrollRight()
{
	m_nDif-=10;
	CClientDC dc(this);
	Drawtabs(&dc);	
	//RecalLayout();
}

void  CGuiTabbed::OnScrollClose()
{
	//no es nuestro problema lo debe manejar la clase derivada
}


int CGuiTabbed::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CGuiTabWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_img.Create(IDB_DOCKBAR,9,11,RGB(255,0,255)))
	{
		TRACE0("error imagelist");
	}

	m_toolBtn[0].Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLLEFT);
	m_toolBtn[0].SetStyleButton(CGuiNormalButton::STL_FLAT);
	m_toolBtn[0].SetToolTip("Scroll Left");
	m_toolBtn[0].SethIcon(m_img.ExtractIcon(4));
	m_toolBtn[0].SetColor(GuiDrawLayer::GetRGBColorTabs());
	m_toolBtn[0].ShowDark(FALSE);
	m_toolBtn[1].Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLRIGHT);
	m_toolBtn[1].SetStyleButton(CGuiNormalButton::STL_FLAT);
	m_toolBtn[1].SetToolTip("Scroll Right");
	m_toolBtn[1].SethIcon(m_img.ExtractIcon(2));
	m_toolBtn[1].SetColor(GuiDrawLayer::GetRGBColorTabs());
	m_toolBtn[1].ShowDark(FALSE);
	m_toolBtnC.Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLCLOSE);
	m_toolBtnC.SetStyleButton(CGuiNormalButton::STL_FLAT);
	m_toolBtnC.SetToolTip("Close");
	m_toolBtnC.SethIcon(m_img.ExtractIcon(10));
	m_toolBtnC.SetColor(GuiDrawLayer::GetRGBColorTabs());
	m_toolBtnC.ShowDark(FALSE);
	m_toolBtn[0].EnableWindow(FALSE);
	m_toolBtn[1].EnableWindow(FALSE);
	SetALingTabs(CGuiTabWnd::ALN_TOP); //los tabs arriba
	SetStyle(CGuiTabWnd::SHADOW);	   //no debe acondicionar el tama駉 de los tabs		return 0;
	SetTypeTab(CGuiTabWnd::TYPE_MDI);
	SetActualTitle(FALSE);
	return 0;
}

CSize CGuiTabbed::GetSizeButton()
{
	CSize szresult=CSize(0,0);
	for (int i=0; i < 3; i++)
	{
		CSize sztemp=m_toolBtn[i].GetSizeButton();
		szresult.cx+=sztemp.cx;
		szresult.cy+=sztemp.cy;
	}
	return szresult;
}



⌨️ 快捷键说明

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