dropdownbutton.cpp

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

CPP
163
字号
// DropDownButton.cpp: implementation of the CDropDownButton class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "XPDrawLayer.h"
#include "DropDownButton.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CDropDownButton,_CGuiToolButton)

CDropDownButton::CDropDownButton():_CGuiToolButton()
{

}

CDropDownButton::~CDropDownButton()
{

}



BEGIN_MESSAGE_MAP(CDropDownButton,_CGuiToolButton)
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONUP()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_TIMER()
END_MESSAGE_MAP()



void CDropDownButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	CDC*  pdc= CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect rc=lpDrawItemStruct->rcItem;
	UINT  uState=lpDrawItemStruct->itemState;
	CBrush cb;
	
	if(uState & ODS_SELECTED) //the button is pressed
	{
		if(m_bPopUp)
			cb.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP());
		else
		    cb.CreateSolidBrush(GuiDrawLayer::GetRGBPressBXP());
	}
	else
	if(m_bMouserOver)
	{
	    cb.CreateSolidBrush(GuiDrawLayer::GetRGBFondoXP());
	}
	else
	{
	   cb.CreateSolidBrush(m_clColor);
	   m_bPopUp = false;
	}
	
	CRect rcArrow(rc);
	rcArrow.DeflateRect(25,0,0,0);

	pdc->FillRect(rc,&cb);
	if (( uState == ODS_SELECTED) || m_bMouserOver )
	{
		pdc->Draw3dRect(rc,GuiDrawLayer::GetRGBCaptionXP(),GuiDrawLayer::GetRGBCaptionXP());
		pdc->Draw3dRect(rcArrow,GuiDrawLayer::GetRGBCaptionXP(),GuiDrawLayer::GetRGBCaptionXP());
		rc.DeflateRect(1,1);
	}
	else if(m_ScrollButton)
	{
		pdc->Draw3dRect(rc,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorShadow());
		rc.DeflateRect(1,1);
	}


	
	int calculodify;
	calculodify=rc.Height()-(m_SizeImage.cy);
	calculodify/=2;
	int nHeigh=calculodify+(m_bShowDark?1:0);
	int nWidth=m_ScrollButton?rc.Width()/2 :2;
	CPoint m_point=CPoint(nWidth,nHeigh);
	
	if (m_SizeImage.cx > 2)
	{
		if(m_bMouserOver == 1 && !(uState & ODS_DISABLED) && !(uState & ODS_SELECTED) && m_bShowDark)
		{
			CPoint p(m_point.x+1,m_point.y+1);
			pdc->DrawState(p,m_SizeImage,m_Icon,DSS_MONO,CBrush (GuiDrawLayer::GetRGBColorShadow()));
			m_point.x-=1; m_point.y-=1;
		}
		pdc->DrawState (m_point, m_SizeImage,m_Icon,
					(uState==ODS_DISABLED?DSS_DISABLED:DSS_NORMAL),(CBrush*)NULL);
	}
	if (m_SizeText.cx > 2)
	{
		int nMode = pdc->SetBkMode(TRANSPARENT);
		CRect rectletra=rc;
		int nt=m_ScrollButton?0:8;
		rectletra.left+=m_SizeImage.cx+nt;
		CPoint pt=CSize(rectletra.top,rectletra.left);

		if (uState & ODS_DISABLED)
			pdc->DrawState(pt, m_SizeText, m_szText, DSS_DISABLED, TRUE, 0, (CBrush*)NULL);
		else
		{
			if(m_bMouserOver != 1) 
				pdc->SetTextColor(m_clrFont);
			pdc->DrawText(m_szText,rectletra,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
		}
		pdc->SetBkMode(nMode);
	}

    COLORREF clrOldTextColor = pdc->GetTextColor();
    pdc->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
    int nPrevBkMode = pdc->SetBkMode(TRANSPARENT);
    CFont font;
    int ppi = pdc->GetDeviceCaps(LOGPIXELSX);
    int pointsize = MulDiv(60, 96, ppi); // 6 points at 96 ppi
    font.CreatePointFont(pointsize+50, _T("Marlett"));
    CFont* oldfont = pdc->SelectObject(&font);

	if(uState & ODS_DISABLED)
	{

	}
	else
    pdc->TextOut(rcArrow.left+2,rcArrow.top + rcArrow.Height()/2-7,CString(_T("u"))); 

    pdc->SelectObject(oldfont);
    pdc->SetBkMode(nPrevBkMode);
    pdc->SetTextColor(clrOldTextColor);
}

void CDropDownButton::OnLButtonUp(UINT nFlags, CPoint point)
{
  nFlags;
  point;
}

void CDropDownButton::OnLButtonDown(UINT nFlags, CPoint point)
{
  nFlags;
  CRect rcBtn;
  GetClientRect(&rcBtn);
  CRect rcArrow(rcBtn);
  rcArrow.DeflateRect(20,0,0,0);
  if(rcArrow.PtInRect(point))
     m_bPopUp = true;
}

void CDropDownButton::OnMouseMove(UINT nFlags, CPoint point)
{
	_CGuiToolButton::OnMouseMove(nFlags,point);
}

⌨️ 快捷键说明

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