📄 guitabwnd.cpp
字号:
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)
{
Image.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())
{
Image.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->SetBkMode(nMode);
}
dc->SelectObject(&m_fontOld);
}
void CGuiTabWnd::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
{
CBitmap cbmp;
BITMAP bmp;
Image.Create(nBitmapID,cx,nGrow,crMask);
cbmp.LoadBitmap(nBitmapID);
cbmp.GetBitmap(&bmp);
Image.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;
}
int CGuiTabWnd::FindHwnd(HWND hWnd)
{
for (int iCont=0; iCont< m_Numtabs;iCont++)
{
CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
if (ct->pParent->GetSafeHwnd() == hWnd)
return iCont;
}
return -1;
}
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];
if (m_alnTab!=ALN_TOP)
ASSERT_VALID(ctn->pParent);
if (ctn)
delete ctn;
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::SetCurTabWnd(CGuiTab *ptab)
{
CWnd* pParentNew= ptab->pParent;
if (m_alnTab==ALN_TOP)
{
pParentNew->BringWindowToTop();
}
else
{
// pParentActual->ShowWindow(SW_HIDE);
pParentNew->ShowWindow(SW_SHOW);
}
Invalidate();
UpdateWindow();
}
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::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
for (int iCont=0; iCont< m_Numtabs;iCont++)
{
CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
if (ct->rect.PtInRect(point) != 0)
{
ClientToScreen(&point);
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_GUI_MESSAGE,MAKEWPARAM(WM_GUI_TAB_RBTNDN,iCont),MAKELPARAM(point.x,point.y));
break;
}
}
CWnd::OnRButtonDown(nFlags, point);
}
//Thanks to Ernesto Garcia
void CGuiTabWnd::SetStyle(Style estyle)
{
m_style=estyle;
}
void CGuiTabWnd::OnDestroy()
{
// Libera la memoria
for( int i=0; i<m_Numtabs; i++ )
{
CGuiTab *pTab = (CGuiTab*)m_pArray.GetAt(i);
if( pTab )
delete pTab;
}
CWnd::OnDestroy();
// TODO: Add your message handler code here
}
int CGuiTabWnd::GetCurWnd(CWnd *pw)
{
// CGuiTab* ctn;
for (int i=0;i < m_Numtabs;i++)
{
if (m_pArray.GetSize() >= 1)
{
m_tab=(CGuiTab*) m_pArray[i];
if(m_tab->pParent==pw) return i;
}
}
return -1;
}
CGuiTab* CGuiTabWnd::GetCurTabWnd(CWnd *pParent)
{
for (int i=0;i < m_Numtabs;i++)
{
if (m_pArray.GetSize() >= 1)
{
m_tab=(CGuiTab*) m_pArray[i];
if(m_tab->pParent==pParent) return m_tab;
}
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -