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

📄 xguitabwnd.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			m_iSizeAct=(m_rectCliente.Width()-12)/m_Numtabs;
			for (int iCont=0; iCont< m_Numtabs;iCont++)
			{
				CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
				CRect m_Arect;
				m_Arect.left=m_NewResize;
				m_Arect.right=m_NewResize+m_iSizeAct;
				m_Arect.top=m_rectCliente.bottom;
				m_Arect.bottom=m_rectCliente.bottom+4+m_sizeImag.cy;
				m_NewResize+=m_iSizeAct+1;
				ct->rect= m_Arect;
			}	
		}
	}

}
void CGuiTabWnd::Drawtabs(CDC* dc)
{
	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);

	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		CPen* oldPen= dc->SelectObject(&light);

		//si es la carpeta seleccionada, se debe 
		//eliminar las lineas oscuras de encima
		if (iCont ==m_iSelectTab)
		{
			CBrush cbr;
			CRect  m_rectTabAux=ct->rect;
			m_rectTabAux.DeflateRect(1,1);
			m_rectTabAux.top-=4;	
			m_rectTabAux.bottom=m_rectTabAux.top+4;
			cbr.CreateSysColorBrush(COLOR_BTNFACE);
			
			dc->FillRect(ct->rect,&cbr);
			dc->MoveTo(ct->rect.left,ct->rect.top-3);
			dc->LineTo(ct->rect.left,ct->rect.bottom-1);
			dc->FillRect(m_rectTabAux,&cbr);

			dc->SelectStockObject(BLACK_PEN);
			dc->MoveTo(ct->rect.left,ct->rect.bottom-1);
			dc->LineTo(ct->rect.right,ct->rect.bottom-1);
			
			//linea derecha observe que se pinta dos veces para
			//dar el efecto de redondeada en la puntas

			dc->SelectStockObject(BLACK_PEN);
			dc->MoveTo(ct->rect.right-1,ct->rect.top-1);
			dc->LineTo(ct->rect.right-1,ct->rect.bottom-1);
		}
		else
		{
			if ((iCont+1) != m_iSelectTab)
			{
				dc->SelectObject(&Dark);
				dc->MoveTo(ct->rect.right-1,ct->rect.top+2);
				dc->LineTo(ct->rect.right-1,ct->rect.bottom-2);
			}
				
			
		}
		//se dibuja el icono
		int nMode = dc->SetBkMode(TRANSPARENT);
		CSize m_sChar=dc->GetTextExtent(ct->lpMsg,strlen(ct->lpMsg));

		if (m_sizeImag.cx+m_sChar.cx < ct->rect.Width()-8)  
		{
			m_pImage->Draw(dc,ct->uIcon,CPoint(ct->rect.left+2,ct->rect.top+2),ILD_TRANSPARENT);
			rectText=ct->rect;
			rectText.left+=m_sizeImag.cx+8;
			rectText.right-=2;
			dc->DrawText(ct->lpMsg,rectText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
			CToolTip.SetToolRect(this,iCont+1,CRect(0,0,0,0));
		}
		else
		{
			//verificamos si se puede poner algun texto o
			//por lo memos el icono
			if (m_sizeImag.cx < ct->rect.Width())
			{
				m_pImage->Draw(dc,ct->uIcon,CPoint(ct->rect.left+2,ct->rect.top+2),ILD_TRANSPARENT);
				rectText=ct->rect;
				rectText.left+=m_sizeImag.cx+8;
				rectText.right-=5;
				CString m_cadBreak=ct->lpMsg;
				int c=0;
				int cont=m_cadBreak.GetLength();
				while(cont > 1 )
				{
					CString m_scadtemp=m_cadBreak+"...";
					CSize coor=dc->GetTextExtent(m_scadtemp,m_scadtemp.GetLength());
					if(coor.cx > rectText.Width())
						m_cadBreak=m_cadBreak.Left(m_cadBreak.GetLength()-1);
					else
						break;
					cont--;
				}
				m_cadBreak+=_T("...");
				rectText.right+=3;
				dc->DrawText(m_cadBreak,rectText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
				CToolTip.SetToolRect(this,iCont+1,&ct->rect);
			}
		}
		dc->SelectObject(oldPen);
		dc->SetBkMode(nMode);
	}	
	dc->SelectObject(&m_fontOld);
}

void CGuiTabWnd::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
{
	CBitmap cbmp;
	BITMAP bmp;
	CImageList Image;
	Image.Create(nBitmapID,cx,nGrow,crMask);
	m_pImage = &Image;
	cbmp.LoadBitmap(nBitmapID);
	cbmp.GetBitmap(&bmp);
	m_pImage->Add(&cbmp,crMask);
	m_sizeImag=CSize(cx,bmp.bmHeight);	
}

CWnd* CGuiTabWnd::GetActiveWnd () const
{
		return m_Numtabs == -1 ? NULL : 
		((CGuiTab*) m_pArray [m_Numtabs])->pParent;
}

BOOL CGuiTabWnd::FindItem(HWND hWnd)
{
	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		if (ct->pParent->GetSafeHwnd() == hWnd)
		    return TRUE;
	}
	return FALSE;

}

CWnd*  CGuiTabWnd::GetNumWnd(int m_numtab) const
{
        if (m_numtab > m_Numtabs)
			return NULL;
		else
		{
			if (m_pArray.GetSize() < 1) return NULL;
			CWnd* pw=((CGuiTab*) m_pArray [m_numtab])->pParent;
			if (HIWORD(pw)== NULL) return NULL;
			else
			  return ((CGuiTab*) m_pArray [m_numtab])->pParent;
		}
}

void CGuiTabWnd::UpdateCaption(CWnd* pWnd,CString m_Title)
{
	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		if (ct->pParent->GetSafeHwnd() == pWnd->GetSafeHwnd())
		{
			CString x=ct->lpMsg;
			if(x!=m_Title)
			{
				ct->lpMsg=m_Title;
				GetParentFrame()->SendMessage(WM_SIZE);
				RecalLayout();
				Invalidate();
				UpdateWindow();
			}
			break;
		}
	}
	
}

void CGuiTabWnd::ShowTitle(CString m_Caption)
{
	if (m_ActualTitle==TRUE)
	{
		CWnd* pParent=GetParent();
		pParent->SetWindowText(m_Caption);
		pParent->SendMessage(WM_COMMAND,WM_SHOWTITLE);
	}
}

void CGuiTabWnd::Addtab(CWnd *pParent, CString lpMsg, UINT uIcon)
{
	ASSERT_VALID(pParent);
	m_pArray.SetAtGrow(m_Numtabs,new CGuiTab(pParent,lpMsg,uIcon));
	if (m_Numtabs==0)
	{
	//	ShowTitle(lpMsg);
		pParent->ShowWindow(SW_SHOW);
		m_iSelectTab=m_Numtabs;
	}
	else
		pParent->ShowWindow(SW_HIDE);
	m_Numtabs++;
	if (m_alnTab==ALN_TOP)	
		pParent->ShowWindow(SW_SHOWMAXIMIZED);
	if (m_style == S3D)
		CToolTip.AddTool(this,lpMsg,CRect(0,0,0,0),m_Numtabs);
	RecalLayout();
}


void CGuiTabWnd::DeleteTab(int m_numtab)
{
	if (m_numtab < m_Numtabs)
	{
		CGuiTab* ctn=(CGuiTab*) m_pArray[m_numtab]; 	
		CWnd* pParen=ctn->pParent;
		if (m_alnTab!=ALN_TOP)
			ASSERT_VALID(pParen);
		m_Numtabs--;
		m_pArray.RemoveAt(m_numtab,1);
		if (m_Numtabs >0)
		{
			if (m_iSelectTab == m_numtab)
			{
				m_iSelectTab=0;
				CGuiTab* ctn =(CGuiTab*) m_pArray[m_iSelectTab];
				CWnd* pParentNew=ctn->pParent;
				ASSERT_VALID(pParentNew);
				pParentNew->ShowWindow(SW_SHOW);
			}
			RecalLayout();
		}
		
	}
}

void CGuiTabWnd::OnSize(UINT nType, int cx, int cy) 
{
	CWnd::OnSize(nType, cx, cy);
	if (m_Numtabs > 0)
		RecalLayout();
	
}


void CGuiTabWnd::SetCurtab(int m_numtab)
{
	if (m_numtab < m_Numtabs && m_numtab != m_iSelectTab )
	{
		CGuiTab* ctn=(CGuiTab*) m_pArray[m_numtab]; 
		CWnd* pParentNew= ctn->pParent;
		CGuiTab* ct =(CGuiTab*) m_pArray[m_iSelectTab];
		CWnd* pParentActual=ct->pParent;
		ASSERT_VALID(pParentNew);
		ASSERT_VALID(pParentActual);
		if (m_alnTab==ALN_TOP)	
		{
			pParentNew->BringWindowToTop();
		}
		else
		{
			pParentActual->ShowWindow(SW_HIDE);
			pParentNew->ShowWindow(SW_SHOW);
		}
		
		m_iSelectTab=m_numtab;
		Invalidate();
		UpdateWindow();
	}

}

int CGuiTabWnd::GetCurtab()
{
	return m_iSelectTab;
}


void CGuiTabWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CWnd::OnLButtonDown(nFlags, point);
	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		if (ct->rect.PtInRect(point) != 0)
		{
            SetCurtab(iCont);
			ShowTitle(ct->lpMsg);
			return;
		}	
	}
}



void CGuiTabWnd::SetStyle(Style estyle)
{
	m_style=estyle;
}

int  CGuiTabWnd::HitTest(CPoint pt)
{
	for (int iCont=0; iCont< m_Numtabs;iCont++)
	{
		CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
		if (ct->rect.PtInRect(pt) != 0)
			return iCont;
	}return -1;
}

⌨️ 快捷键说明

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