📄 switchbutton.cpp
字号:
// SwitchButton.cpp : implementation file
//
#include "stdafx.h"
#include "DSOTEST.h"
#include "SwitchButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSwitchButton
CSwitchButton::CSwitchButton()
{
m_SwitchNumb=2;
m_select=0;
m_ptClicked.x=0;
m_ptClicked.y=0;
}
CSwitchButton::~CSwitchButton()
{
}
BEGIN_MESSAGE_MAP(CSwitchButton, CButton)
//{{AFX_MSG_MAP(CSwitchButton)
ON_WM_DRAWITEM()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSwitchButton message handlers
void CSwitchButton::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
CButton::PreSubclassWindow();
ModifyStyle(0, BS_OWNERDRAW);
}
void CSwitchButton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// CButton::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
//#define BAR_H 16
void CSwitchButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct != NULL);
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rect = lpDrawItemStruct->rcItem;
UINT state = lpDrawItemStruct->itemState;
UINT nStyle = GetStyle();
// int nRadius = m_nRadius;
int bar_h=rect.Height ()/m_SwitchNumb;
int nSavedDC = pDC->SaveDC();
if(lpDrawItemStruct->itemAction==ODA_SELECT)
{ for(int i=0;i<m_SwitchNumb;i++)
{ if(m_ptClicked.y>=i*bar_h&&m_ptClicked.y<(i+1)*bar_h)
break;
}
if(i==m_SwitchNumb)
i=m_SwitchNumb-1;
m_select=i;
}
int bar_y=rect.top +m_select*bar_h;
pDC->SelectStockObject(NULL_BRUSH);
pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE));
rect.left +=1;
rect.right -=1;
rect.top +=1;
rect.bottom-=1;
CPen* oldpen;
oldpen = pDC->SelectObject(new CPen(PS_SOLID, 1, RGB(255,255,255)));
pDC->MoveTo (rect.right ,rect.top);
pDC->LineTo (rect.left,rect.top );
pDC->LineTo (rect.left,rect.bottom );
pDC->MoveTo (rect.right-1 ,rect.top+1);
pDC->LineTo (rect.right-1,rect.bottom-1 );
pDC->LineTo (rect.left+2,rect.bottom-1 );
delete pDC->SelectObject(new CPen(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW)));
pDC->MoveTo (rect.right, rect.top );
pDC->LineTo (rect.right,rect.bottom);
pDC->LineTo (rect.left,rect.bottom );
pDC->MoveTo (rect.right-1 ,rect.top+1);
pDC->LineTo (rect.left+1,rect.top+1);
pDC->LineTo (rect.left+1,rect.bottom-1 );
rect.left +=2;
rect.right -=1;
rect.top +=2;
rect.bottom-=1;
pDC->FillSolidRect(rect, RGB(0,0,0));
rect = lpDrawItemStruct->rcItem;
delete pDC->SelectObject(new CPen(PS_SOLID, 1, RGB(0,0,0)));
pDC->SelectStockObject(LTGRAY_BRUSH );
//pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE));
pDC->Rectangle (rect.left ,bar_y,rect.right ,bar_y+bar_h);
delete pDC->SelectObject(new CPen(PS_SOLID, 1, RGB(255,255,255)));
pDC->MoveTo (rect.right-2 ,bar_y+1);
pDC->LineTo (rect.left+1,bar_y+1);
pDC->LineTo (rect.left+1,bar_y+1+bar_h-2);
pDC->MoveTo (rect.left +rect.Width ()/4,bar_y+bar_h/2-1);
pDC->LineTo (rect.right-rect.Width ()/4,bar_y+bar_h/2-1);
delete pDC->SelectObject(new CPen(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW)));
pDC->MoveTo (rect.right-2 ,bar_y+1);
pDC->LineTo (rect.right-2,bar_y+1+bar_h-3);
pDC->LineTo (rect.left+1,bar_y+1+bar_h-3);
delete pDC->SelectObject(new CPen(PS_SOLID, 1, RGB(0,0,0)));
pDC->MoveTo (rect.left +rect.Width ()/4,bar_y+bar_h/2+1);
pDC->LineTo (rect.right-rect.Width ()/4,bar_y+bar_h/2+1);
pDC->RestoreDC(nSavedDC);
}
void CSwitchButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(nFlags=MK_LBUTTON)
{m_ptClicked=point;
SendMessage(BM_SETSTATE,0,0);
}
CButton::OnMouseMove(nFlags, point);
}
void CSwitchButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptClicked=point;
CButton::OnLButtonDown(nFlags, point);
}
void CSwitchButton::SetSwitchNumber(int n)
{
m_SwitchNumb=n;
}
void CSwitchButton::SetSelectID(int s)
{
m_select=s;
}
int CSwitchButton::GetSelectSite()
{
return m_select;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -