tabcontainer.cpp

来自「用bcg库编写的java IDE 源码」· C++ 代码 · 共 331 行

CPP
331
字号
// TabContainer.cpp : implementation file
//

#include "stdafx.h"
#include "TabContainer.h"
#include "XPDrawLayer.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTabContainer

CTabContainer::CTabContainer()
{
}

CTabContainer::~CTabContainer()
{
  int size = m_ptrComponents.GetSize();
  for(int i=0; i<size;i++)
	  delete m_ptrComponents[i];
}


BEGIN_MESSAGE_MAP(CTabContainer, CWnd)
	//{{AFX_MSG_MAP(CTabContainer)
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CTabContainer message handlers

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

  GetClientRect(&rcClient);

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

  CBrush brBackgrnd(GuiDrawLayer::GetRGBColorXP());
  mdc.FillRect(rcClient,&brBackgrnd);
  brBackgrnd.DeleteObject();

  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();
}

CWnd* CTabContainer::addComponent(CRuntimeClass *m_rtcwnd, UINT nID, DWORD dwStyle
								  ,CPoint ptOrg,CPoint ptTerm)
{
	CWnd* m_cwnd=NULL;
	BOOL btype=FALSE; //only object small
	/**
	if (m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CComboBox)))
	{
		 m_cwnd = new CGuiComboBoxExt();
		 if (!((CGuiComboBoxExt*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(1,1,100,100), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
    **/
	if (m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CTreeCtrl)))
	{
		 m_cwnd = new CTreeCtrl();
		 if (!((CTreeCtrl*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}

	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CListCtrl)))
	{
		m_cwnd = new CListCtrl();
	    if (!((CListCtrl*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		goto crear;

	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CListBox)))
	{
		 m_cwnd = new CListBox();
		 if (!((CListBox*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CEdit)))
	{
		 m_cwnd = new CEdit();
		 if (!((CEdit*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CButton)))
	{
		 m_cwnd = new CButton();
		 if (!((CButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	/**
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiImageLinkButton)))
	{
		 m_cwnd = new CGuiImageLinkButton();
		 if (!((CGuiImageLinkButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiLabelButton)))
	{
		 m_cwnd = new CGuiLabelButton();
		 if (!((CGuiLabelButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiVisioFolder)))
	{
		 m_cwnd = new CGuiVisioFolder();
		 if (!((CGuiVisioFolder*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiToolButton)))
	{
		 m_cwnd = new CGuiToolButton();
		 if (!((CGuiToolButton*)m_cwnd)->Create(_T(""),
			 dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			 btype=TRUE;
			return NULL;
		 goto crear;
	}
	**/
	else
	{
		   m_cwnd=(CWnd*) m_rtcwnd->CreateObject();
		   if (!m_cwnd->Create(0,0,dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		   goto crear;
	}
crear:
	m_ptrComponents.Add(new __Component(ptOrg,ptTerm,m_cwnd));
	//**RecalLayout();
	return m_cwnd;
}


CWnd* CTabContainer::addComponent(CRuntimeClass* m_rtcwnd,UINT nID,DWORD dwStyle,
		CRect rcRect)
{

	CWnd* m_cwnd=NULL;
	BOOL btype=FALSE; //only object small
	/**
	if (m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CComboBox)))
	{
		 m_cwnd = new CGuiComboBoxExt();
		 if (!((CGuiComboBoxExt*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(1,1,100,100), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
    **/
	if (m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CTreeCtrl)))
	{
		 m_cwnd = new CTreeCtrl();
		 if (!((CTreeCtrl*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}

	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CListCtrl)))
	{
		m_cwnd = new CListCtrl();
	    if (!((CListCtrl*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		goto crear;

	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CListBox)))
	{
		 m_cwnd = new CListBox();
		 if (!((CListBox*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CEdit)))
	{
		 m_cwnd = new CEdit();
		 if (!((CEdit*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CButton)))
	{
		 m_cwnd = new CButton();
		 if (!((CButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	/**
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiImageLinkButton)))
	{
		 m_cwnd = new CGuiImageLinkButton();
		 if (!((CGuiImageLinkButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiLabelButton)))
	{
		 m_cwnd = new CGuiLabelButton();
		 if (!((CGuiLabelButton*)m_cwnd)->Create(_T(""),dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 btype=TRUE;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiVisioFolder)))
	{
		 m_cwnd = new CGuiVisioFolder();
		 if (!((CGuiVisioFolder*)m_cwnd)->Create(dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		 goto crear;
	}
	else if ( m_rtcwnd->IsDerivedFrom(RUNTIME_CLASS(CGuiToolButton)))
	{
		 m_cwnd = new CGuiToolButton();
		 if (!((CGuiToolButton*)m_cwnd)->Create(_T(""),
			 dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			 btype=TRUE;
			return NULL;
		 goto crear;
	}
	**/
	else
	{
		   m_cwnd=(CWnd*) m_rtcwnd->CreateObject();
		   if (!m_cwnd->Create(0,0,dwStyle|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, nID))
			return NULL;
		   goto crear;
	}
crear:
	m_ptrComponents.Add(new __Component(rcRect,m_cwnd));
	//**RecalLayout();
	return m_cwnd;
}


void CTabContainer::addButton(int iImage,_CGuiToolButton* pwndComp,
							  CString m_szCaption,CString m_ToolTip)
{
	if (!m_szCaption.IsEmpty())
	{
		//m_guib->SetFont(&m_cfont);
		//m_guib->SetCaption(m_szCaption);
	}
	CRect rcWin;
	pwndComp->GetWindowRect(&rcWin);
	CTabContainer::__Component* pComp = new CTabContainer::__Component(rcWin,pwndComp);
	m_ptrComponents.Add(pComp);
	pwndComp->SethIcon(m_imgList.ExtractIcon(iImage));
}

void CTabContainer::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
{
	CBitmap cbmp;
	BITMAP bmp;
	m_imgList.Create(nBitmapID,cx,nGrow,crMask);
	cbmp.LoadBitmap(nBitmapID);
	cbmp.GetBitmap(&bmp);
	m_imgList.Add(&cbmp,crMask);
}


void CTabContainer::addComponent(CWnd* pwndComp,CRect rcRect)
{
  m_ptrComponents.Add(new __Component(rcRect,pwndComp));
}

void CTabContainer::addComponent(CWnd* pwndComp,CPoint ptOrg,CPoint ptTerm)
{
  m_ptrComponents.Add(new __Component(ptOrg,ptTerm,pwndComp));
}


void CTabContainer::OnSize(UINT nType, int cx, int cy) 
{
  CWnd::OnSize(nType, cx, cy);
  int size = m_ptrComponents.GetSize();
  for(int i=0; i<size; i++)
    if(m_ptrComponents[i]->resize())
 	  m_ptrComponents[i]->updateCoords(cx,cy);
}



BOOL CTabContainer::PreCreateWindow(CREATESTRUCT& cs) 
{
    cs.style |= WS_CLIPCHILDREN;	
	return CWnd::PreCreateWindow(cs);
}

BOOL CTabContainer::OnEraseBkgnd(CDC* pDC) 
{pDC;
	return TRUE;
}

⌨️ 快捷键说明

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