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

📄 guitoolbarwnd.cpp

📁 这是一个串口监视程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				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 + -