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

📄 xguitabwnd.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------//
// 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														 //
//-----------------------------------------------------------------------//



#include "stdafx.h"

#include "xGuiTabWnd.h"
#include "GuiBasetab.h"
//#include "resource.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGuiTabWnd

#define  SPACE_TAB		4
#define  DEFAULT_FLAT	18
#define  WM_SHOWTITLE   2022

CGuiTabWnd::CGuiTabWnd()
{
	m_rectCliente.SetRectEmpty();
	m_rectTab.SetRectEmpty();
	m_ActualVar=0;
	m_Numtabs=0;
	m_iSelectTab=0;
	m_sizeImag=CSize(15,15);
	m_pArray.RemoveAll();
	m_iMinValRec=0;  //minimo valor requerido para mostrar toda las carpetas
	m_cfont.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,(LPCTSTR)"MS Sans Serif");
	m_style=S3D;
	m_ActualTitle=TRUE;
	m_alnTab=ALN_BOTTOM;
	m_TypeTab=TYPE_NORMAL;
}

CGuiTabWnd::~CGuiTabWnd()
{
}


BEGIN_MESSAGE_MAP(CGuiTabWnd, CWnd)
	//{{AFX_MSG_MAP(CGuiTabWnd)
	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_WM_LBUTTONDOWN()
	ON_WM_SYSCOLORCHANGE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CGuiTabWnd message handlers

BOOL CGuiTabWnd::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_MOUSEMOVE)
		CToolTip.RelayEvent(pMsg);

	return CWnd::PreTranslateMessage(pMsg);
}

//****************************************************************************
void CGuiTabWnd::OnSysColorChange( )
{
	CWnd::OnSysColorChange( );
	
}

void CGuiTabWnd::SetTypeTab(TypeTab Type)
{
	m_TypeTab=Type;
}
//****************************************************************************
BOOL CGuiTabWnd::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	if (m_Numtabs == 0)
	{
		CBrush cbr;
		cbr.CreateSysColorBrush(COLOR_BTNFACE);
		CRect m_rect;
		GetClientRect(m_rect);
		pDC->FillRect(m_rect,&cbr);
		
	}
	return TRUE;
}

void CGuiTabWnd::SetActualTitle(BOOL bActual)
{
	m_ActualTitle=bActual;
}

void CGuiTabWnd::SetALingTabs(AlingTab alnTab)
{
	m_alnTab=alnTab;
	Invalidate();
	UpdateWindow();
}

void CGuiTabWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
    CRect rcClip;
    dc.GetClipBox(&rcClip);
    CRect rcClient;
    GetClientRect(&rcClient);

	CDC mdc;
    mdc.CreateCompatibleDC(&dc);
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
    CBitmap* pOldBmp = mdc.SelectObject(&bmp);


	CBrush cbr;
	CRect m_rectDraw;
	if (m_alnTab!=ALN_TOP)
		cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP());
	else
		cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorFace());

	GetClientRect(m_rectCliente);
	m_rectTab=m_rectCliente;
	m_rectDraw=m_rectCliente;

	if (m_alnTab==ALN_BOTTOM)
		m_rectDraw.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+2);	
	else
		m_rectDraw.top=m_rectCliente.top+(m_sizeImag.cy+SPACE_TAB+2);
	
	if (m_alnTab!=ALN_TOP)
	{
		mdc.FillRect(m_rectTab,&cbr);
		mdc.Draw3dRect(m_rectDraw,GetSysColor(COLOR_BTNSHADOW),GetSysColor(COLOR_BTNSHADOW));
	}
	else
	{
		CRect rc=m_rectDraw;
		for (int i=0; i< 2; i++)
		{
			mdc.Draw3dRect(rc,GuiDrawLayer::GetRGBColorFace(),GuiDrawLayer::GetRGBColorFace());
			rc.DeflateRect(1,1);
		}
		
		rc.InflateRect(3,3);
		dc.Draw3dRect(rc,GetSysColor(COLOR_BTNSHADOW),GetSysColor(COLOR_BTNSHADOW));
		rc=m_rectDraw;
		rc.bottom=rc.top+3;
		mdc.FillRect(rc,&cbr);
		
	}
	
	
	if (m_style != S3D) //si son carpetas estilo excel o tabbed como devstudio 7
	{
		if (m_alnTab==ALN_BOTTOM)
		{
			m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT);
			m_rectTab.top=m_rectCliente.bottom+2;
		}
		else
		{
			m_rectTab.bottom=m_rectCliente.top+(DEFAULT_FLAT)+3;
		}
	}

	Drawtabs(&mdc);

  dc.BitBlt (rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(),
					   &mdc, rcClip.left, rcClip.top, SRCCOPY);
  mdc.SelectObject(pOldBmp);
  ReleaseDC(&dc);
  bmp.DeleteObject();
  mdc.DeleteDC();
}



BOOL CGuiTabWnd::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) 
{
	// TODO: Add your specialized code here and/or call the base class
	pParent= pParentWnd;
	return CWnd::Create(NULL, _T(""), dwStyle, rect, pParentWnd, nID);
}

int CGuiTabWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	CToolTip.Create(this,TTS_ALWAYSTIP);
	CToolTip.Activate(TRUE);
	CToolTip.BringWindowToTop();
	// TODO: Add your specialized creation code here
	
	return 0;
}


void CGuiTabWnd::RecalLayout()
{
	GetClientRect(m_rectCliente);

	if (m_style == S3D)
	{
		m_rectCliente.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+1);
	}
	else
	{
		if (m_alnTab==ALN_BOTTOM)
			m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT);
		else
		{
			m_rectCliente.top+=DEFAULT_FLAT;
			m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT+4);

		}
	}

	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		CWnd* m_tempWin= ct->pParent;
		ASSERT_VALID(m_tempWin);
		if (m_style == S3D)
		{
			   m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-2),
			   m_rectCliente.top+(SPACE_TAB/2),m_rectCliente.right-(SPACE_TAB+1),
			   m_rectCliente.bottom-(SPACE_TAB+2),SWP_NOACTIVATE|
			   SWP_NOZORDER);
		}
		else
		{
			if (m_alnTab==ALN_BOTTOM)	
			{
			   m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-3),
			   m_rectCliente.top+3,m_rectCliente.right-2,
			   m_rectCliente.bottom-1,SWP_NOACTIVATE|SWP_NOZORDER);
			}
			else
			{ 
				if (m_TypeTab == TYPE_NORMAL)
				{
				  m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-3),
				  m_rectCliente.top+3,m_rectCliente.right-2,
				  m_rectCliente.bottom,SWP_NOACTIVATE|SWP_NOZORDER);
				}
			}
		}
	}
	AjustTabs();
	Invalidate();
	UpdateWindow();
}


void CGuiTabWnd::AjustTabs()
{
	int m_iSizeAct=0;
	m_iMinValRec=4;
	CClientDC dc(this);
	GetClientRect(m_rectCliente);

	if (m_alnTab==ALN_BOTTOM)
		m_rectCliente.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+1);
	else
		m_rectCliente.bottom=m_rectCliente.top+(m_sizeImag.cy+SPACE_TAB+1);

	CFont* m_fontOld=dc.SelectObject(&m_cfont);
	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		CRect m_Arect;
		CSize m_sChar=dc.GetTextExtent(ct->lpMsg);
		m_Arect.left=m_iMinValRec+1;
		m_iMinValRec+=m_alnTab!=ALN_TOP?m_sizeImag.cx+2+m_sChar.cx+14:m_sChar.cx+14;
		if(m_alnTab==ALN_BOTTOM)
		{
			m_Arect.top=m_rectCliente.bottom;
			m_Arect.right=m_iMinValRec;
			m_Arect.bottom=m_rectCliente.bottom+4+m_sizeImag.cy;
		}
		else
		{
			m_Arect.top=m_rectCliente.top;
			m_Arect.right=m_iMinValRec;
			m_Arect.bottom=m_rectCliente.top+4+m_sizeImag.cy;
		}
		ct->rect= m_Arect;
		
	}		
	dc.SelectObject(&m_fontOld);
	//si el espacio requerido es mayor que el disponible
	//se debe proporcionar cada tab solo si es 3d
	if (m_style== S3D)
	{
		int m_NewResize=4;
		if (m_iMinValRec > m_rectCliente.Width()-4)

⌨️ 快捷键说明

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