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 + -
显示快捷键?