📄 guitoolbarwnd.cpp
字号:
continue;
}
}
else
{
if( ! CRect().IntersectRect(rcAreaUpdate, rcBtn) )
continue;
mbIsPress=(wState & TBSTATE_CHECKED) || (wState & TBSTATE_PRESSED);
mbIsEnabled= GetToolBarCtrl().IsButtonEnabled((int)nID);
if (mbIsEnabled)
{
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CBrush cblu;
if(!rcBtn.PtInRect(pt))
{
if (wState & TBSTATE_CHECKED)
{
cblu.CreateSolidBrush(GuiDrawLayer::GetRGBPressBXP());
dc.FillRect(rcBtn,&cblu);
}
else
{
dc.FillRect(rcBtn,&cb);
}
}
else
{
if (bPressDown)
dc.Draw3dRect(rcBtn,GuiDrawLayer::GetRGBMenu(),GuiDrawLayer::GetRGBMenu());
else
dc.Draw3dRect(rcBtn,GuiDrawLayer::GetRGBCaptionXP(),GuiDrawLayer::GetRGBCaptionXP());
rcBtn.DeflateRect(1,1);
if (wState & TBSTATE_CHECKED)
{
cblu.CreateSolidBrush(GuiDrawLayer::GetRGBFondoXP());
dc.FillRect(rcBtn,&cblu);
}
else
{
if (bPressDown)
{
cblu.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP());
dc.FillRect(rcBtn,&cblu);
}
else
{
cblu.CreateSolidBrush(mbIsPress?GuiDrawLayer::GetRGBPressBXP():GuiDrawLayer::GetRGBFondoXP());
dc.FillRect(rcBtn,&cblu);
}
if (wStyle == 8)
{
CRect rcCli=rcBtn;
int dif=rcBtn.right-_afxGuiDropDownWidth;
rcCli.left=dif+1;
if (!bPressDown)
{
CPen Cp( PS_SOLID, 1, GuiDrawLayer::GetRGBCaptionXP());
CPen* oldPen= dc.SelectObject(&Cp);
dc.MoveTo(dif,rcBtn.top);
dc.LineTo(dif,rcBtn.bottom);
dc.SelectObject(&oldPen);
}
}
if (!mbIsPress && !bPressDown)
bOver=TRUE;
else
bOver=FALSE;
}
rcBtn.InflateRect(1,1);
}
}
}
if (wStyle != TBSTYLE_SEP)
{
HICON hIcon = ImageList_ExtractIcon (NULL, hiImg, iBitmap);
IMAGEINFO pImageInfo;
CRect rcima =pImageInfo.rcImage;
CSize siImg=CSize(rcima.Width(),rcima.Height());
CPoint pti(rcBtn.left+2,rcBtn.top+4);
CString mszText=GetButtonText(i);
CFont* m_fontOld=dc.SelectObject(&m_cfont);
if (!(wState & TBSTATE_ENABLED))
{
if (bOver==TRUE)
{
pti.x+=1;
pti.y+=1;
dc.DrawState(pti,m_sizeImage,hIcon,DSS_MONO,CBrush (GuiDrawLayer::GetRGBColorShadow()));
pti.x-=2; pti.y-=2;
}
dc.DrawState(pti,m_sizeImage,hIcon,DSS_NORMAL,CBrush (GuiDrawLayer::GetRGBColorShadow()));
// m_imgList.Draw(&m_dc, iBitmap, pti, ILD_TRANSPARENT);
if (mszText.GetLength() > 0 && !bVertDocked)
{
CRect m_rctext=rcBtn;
m_rctext.left+=m_sizeImage.cx+4;
m_rctext.bottom-=1;
dc.DrawText(mszText,&m_rctext,DT_SINGLELINE|DT_BOTTOM);
}
}
else
{
dc.DrawState(pti,m_sizeImage,hIcon,DSS_MONO,CBrush (GuiDrawLayer::GetRGBColorShadow()));
// m_dc.DrawState(pti,siImg,m_imgList.ExtractIcon(iBitmap),DSS_DISABLED,(CBrush*)NULL);
CRect m_rctext=rcBtn;
m_rctext.left+=m_sizeImage.cx+4;
m_rctext.bottom-=1;
CSize szText=dc.GetTextExtent(mszText);
pti.x= m_rctext.left+2;
pti.y=(m_rctext.Height()/2)-1;
//DrawState(pt, m_Csize, m_szCaption, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
dc.DrawState(pti,szText,mszText,DSS_DISABLED,TRUE,0,(HBRUSH)NULL);
}
DestroyIcon (hIcon);
if (wStyle == 8)
DrawArrow(&dc,rcBtn);
iBitmap++;
iUltbot=rcBtn.bottom;
j++;
}
}
dc.SetBkMode(OldMode);
}
void CGuiToolBarWnd::DrawArrow(CDC* pDC,CRect m_rc)
{
int difh =m_rc.Height()-mHeight.y;
difh/=2;
m_rc.left=m_rc.right-_AfxGuiGetDropDownWidth();
m_imgArrow.Draw(pDC,0,CPoint(m_rc.left+2,m_rc.top+difh),ILD_TRANSPARENT);
}
void CGuiToolBarWnd::DrawGripper(CWindowDC* dc,CRect* rcWin)
{
if (m_dwStyle & CBRS_FLOATING) return ;
if(!m_bIsXp) //no es XP
{
if (m_dwStyle & CBRS_ORIENT_HORZ)
{
rcWin->top+=2;
rcWin->left+=2;
rcWin->right=rcWin->left+3;
rcWin->bottom-=1;
dc->Draw3dRect(rcWin,::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
if (m_style == Office97)
{
rcWin->left=rcWin->right+1;
rcWin->right=rcWin->left+3;
dc->Draw3dRect(rcWin,::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
}
}
else
{
rcWin->top+=2;
//rcWin->left+=1;
rcWin->right-=2;
rcWin->bottom=rcWin->top+3;
dc->Draw3dRect(rcWin,::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
if (m_style == Office97)
{
rcWin->top=rcWin->bottom+1;
rcWin->bottom=rcWin->top+3;
dc->Draw3dRect(rcWin,::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
}
}
}
else
{
if (m_dwStyle & CBRS_ORIENT_HORZ)
{
rcWin->top+=5;
rcWin->left+=4;
rcWin->right=rcWin->left+3;
rcWin->bottom-=3;
for (int i=0; i < rcWin->Height(); i+=2)
{
CRect rcWindow;
CBrush cb;
cb.CreateSolidBrush(::GetSysColor(COLOR_BTNSHADOW));
rcWindow=rcWin;
rcWindow.top=rcWin->top+i;
rcWindow.bottom=rcWindow.top+1;
dc->FillRect(rcWindow,&cb);
}
}
else
{
rcWin->top+=2;
rcWin->left+=2;
rcWin->right-=2;
rcWin->bottom=rcWin->top+3;
for (int i=0; i < rcWin->Width(); i+=2)
{
CRect rcWindow;
CBrush cb;
cb.CreateSolidBrush(::GetSysColor(COLOR_BTNSHADOW));
rcWindow=rcWin;
rcWindow.left=rcWindow.left+i;
rcWindow.right=rcWindow.left+1;
dc->FillRect(rcWindow,&cb);
}
}
}
}
void CGuiToolBarWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CToolBar::OnLButtonDown(nFlags, point);
if (m_iSelected == 1) return;
m_iSelected =1;
}
void CGuiToolBarWnd::OnRButtonDown(UINT nFlags, CPoint point)
{
CToolBar::OnRButtonDown(nFlags,point);
ClientToScreen (&point);
CMenu m_menu;
m_menu.LoadMenu(MenuContext);
if (!m_menu.GetSafeHmenu())
return ;
CMenu* m_SubMenu = m_menu.GetSubMenu(0);
m_SubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
point.x, point.y-2, AfxGetMainWnd());
Invalidate();
UpdateWindow();
}
BOOL CGuiToolBarWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CPoint ptCurPos;
CRect rc;GetClientRect(rc);
GetCursorPos (&ptCurPos);
ScreenToClient (&ptCurPos);
if (m_dwStyle & CBRS_ORIENT_HORZ)
{
rc.right=rc.left+2;
if (ptCurPos.x< 0)
{
SetCursor (LoadCursor(NULL, IDC_SIZEALL));
return TRUE;
}
}
else
{
rc.bottom=rc.top+2;
if (ptCurPos.y< 0)
{
SetCursor (LoadCursor(NULL, IDC_SIZEALL));
return TRUE;
}
}
return CToolBar::OnSetCursor(pWnd, nHitTest, message);
}
void CGuiToolBarWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
CToolBar::OnLButtonUp(nFlags, point);
if (m_iSelected == 1)
{
m_iSelected =0;
KillTimer(1);
SetTimer(1,10,NULL);
}
}
void CGuiToolBarWnd::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CRect m_rect;
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
GetClientRect(m_rect);
if (nIDEvent == 1)
{
if (!m_rcBtnGlobal.PtInRect(pt))
{
m_iSelected =0;
KillTimer(1);
if (!bPressDown)
{
InvalidateRect(m_rcBtnGlobal);
UpdateWindow();
}
m_rcBtnGlobal.SetRectEmpty();
}
}
CToolBar::OnTimer(nIDEvent);
}
//**************************************************************************
int CGuiToolBarWnd::GetLastPos()
{
int nNumBars=(int)m_pDockBar->m_arrBars.GetSize();
int m_pos=m_pDockBar->FindBar(this);
for(int i=m_pos+1; i< nNumBars;i++)
{
if (m_pDockBar->m_arrBars[i]== NULL)
return i-1;
}
return -1;
}
//**************************************************************************
int CGuiToolBarWnd::GetFirstPos()
{
int m_pos=m_pDockBar->FindBar(this);
for(int i=m_pos; i>=0;i--)
{
if (m_pDockBar->m_arrBars[i]== NULL)
return i+1;
}
return -1;
}
//**************************************************************************
CRect CGuiToolBarWnd::GetDockRect()
{
CRect rcWin;
if (IsVert())
if (IsLeft())
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_LEFT)->GetWindowRect(rcWin);
else
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_RIGHT)->GetWindowRect(rcWin);
else
if(IsBottom())
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_BOTTOM)->GetWindowRect(rcWin);
else
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_TOP)->GetWindowRect(rcWin);
return rcWin;
}
//**************************************************************************
int CGuiToolBarWnd::GetHiWid()
{
CRect rcWin;
rcWin=GetDockRect();
if (!(m_dwStyle & CBRS_ORIENT_HORZ))
{
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_LEFT)->GetWindowRect(rcWin);
return rcWin.Height() ;
}
else
{
m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_TOP)->GetWindowRect(rcWin);
return rcWin.Width() ;
}
}
//**************************************************************************
void CGuiToolBarWnd::SetRealSize()
{
CRect rcWinFrame;
CRect rcThisBar;
int nVisibles=0;
int nThis = m_pDockBar->FindBar(this);
int nFirst= GetFirstPos();
int nLast= GetLastPos();
UINT m_nDockBarID = m_pDockBar->GetDlgCtrlID();
int nMaxlen=GetHiWid();
int nLen=0;
for (int i=nFirst;i <nLast; i++)
{
CGuiToolBarWnd* pBar;
pBar = (CGuiToolBarWnd*) m_pDockBar->m_arrBars[i];
if (HIWORD(pBar) == 0) continue;
if (!pBar->IsVisible()) continue;
CRect rc;
pBar->GetWindowRect(rc);
if (IsVert())
nLen+=rc.Height() ;
else
nLen+= rc.Width() ;
nVisibles++;
}
if ( nLen > nMaxlen)
{
int nDif=nLen-nMaxlen;
}
/* if (rcThisBar.Width() > nAfterThis)
{
if (nVisibles > 0)
nAfterThis/=nVisibles;
}
*/
}
#define CX_OVERLAP 0
//***************************************************************************
CSize CGuiToolBarWnd::CalcSize(TBBUTTON* pData, int nCount)
{
ASSERT(pData != NULL && nCount > 0);
BOOL bDrow=FALSE;
int nNumDrow=0;
CPoint cur(0,0);
CSize sizeResult(0,0);
CClientDC dc(this);
int xSizeMin=32;
if(m_dwStyle & CBRS_FLOATING )
SetSizes(m_sizeButton, m_sizeImage);
if (bVertDocked)
::SendMessage(m_hWnd, TB_SETMAXTEXTROWS, 0, 0);
else
::SendMessage(m_hWnd, TB_SETMAXTEXTROWS, 1, 0);
int nSizeBar=0;
int nSizeBarReal=0;
int nSizeHoWid=GetHiWid();
DWORD dwExtendedStyle = DefWindowProc(TB_GETEXTENDEDSTYLE, 0, 0);
for (int i = 0; i < nCount; i++)
{
CRect rcButton;
GetItemRect ( i, &rcButton );
/*if (!IsVert())
{
nSizeBar+=rcButton.Width();
nSizeBarReal+=rcButton.Width();
}
else
{
nSizeBar+=rcButton.Height();
nSizeBarReal+=rcButton.Height();
}
if (nSizeBar > nSizeHoWid && nSizeHoWid > 0)
{
if ((pData[i].fsStyle & TBSTYLE_SEP) &&(pData[i].idCommand!=0))
{
CRect rc;
CWnd * pWnd =GetDlgItem(pData[i].idCommand);
ASSERT_VALID(pWnd);
pWnd->ShowWindow( SW_HIDE );
pData[i].fsState |= TBSTATE_HIDDEN;
if (rcButton.left+10 > nSizeHoWid)
{
nSizeBar=nSizeHoWid;
continue;
}
}else
{
pData[i].fsState |= TBSTATE_HIDDEN;
nSizeBar=nSizeHoWid;
continue;
}
nSizeBar=nSizeHoWid;
}
else
*/ if ((pData[i].fsStyle & TBSTYLE_SEP) &&(pData[i].idCommand!=0))
{
if (bVertDocked || IsFloating())
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -