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

📄 switchbutton.cpp

📁 最新的USB示波器源码?可直接编译生成可执行程序,需要硬件支持
💻 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 + -