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

📄 switchbutton.cpp

📁 模拟了现实中的示波器
💻 CPP
字号:
// ColorButton.cpp : implementation file
//

#include "stdafx.h"
//#include "Test.h"
#include "SwitchButton.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSwitchButton

CSwitchButton::CSwitchButton()
{
	m_nSwitch = 0;
	m_bLeftClick = TRUE;
	m_nNumOfSwitch = 2;
}

CSwitchButton::~CSwitchButton()
{
}


BEGIN_MESSAGE_MAP(CSwitchButton, CButton)
	//{{AFX_MSG_MAP(CSwitchButton)
	ON_WM_LBUTTONUP()
	ON_WM_RBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSwitchButton message handlers

void CSwitchButton::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	ModifyStyle(0, BS_OWNERDRAW);
	CRect rect;
	GetClientRect(rect);
	rect.bottom = rect.right = min(rect.bottom, rect.right);
	
	CRgn rgn;
	rgn.DeleteObject();
	rgn.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
	SetWindowRgn(rgn, TRUE);
	ClientToScreen(rect);

	CWnd* pParent = GetParent();
	if (pParent) pParent->ScreenToClient(rect);
	// Resize the window
	MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);
	CButton::PreSubclassWindow();
}

void CSwitchButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect rect = lpDrawItemStruct->rcItem;

	CBitmap bmp, *pOldBmp;
	BITMAP BMP;
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	bmp.LoadBitmap(m_nBmpResource + m_nSwitch);
	bmp.GetBitmap(&BMP);
	pOldBmp = memDC.SelectObject(&bmp);
	if(BMP.bmWidth == rect.Width() && BMP.bmHeight == rect.Height())
		pDC->BitBlt(0,0,rect.Width(), rect.Height(),
				&memDC, 0,0,SRCCOPY);
	else
		pDC->StretchBlt(0,0,rect.Width(), rect.Height(),
				&memDC, 0,0,BMP.bmWidth, BMP.bmHeight, SRCCOPY);

	memDC.SelectObject(pOldBmp);		

}

void CSwitchButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bLeftClick)
	{
		m_nSwitch --;
		if(m_nSwitch<0)
			m_nSwitch = 0;
		else
			Invalidate();
	}
	m_bLeftClick = TRUE;
	CButton::OnLButtonUp(nFlags, point);
}


void CSwitchButton::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_nSwitch ++;
	if(m_nSwitch > m_nNumOfSwitch)
		m_nSwitch = m_nNumOfSwitch;
	else
		Invalidate();

	m_bLeftClick = FALSE;
	::SendNotifyMessage(m_hWnd, WM_LBUTTONDOWN,MK_LBUTTON,NULL);
	::SendNotifyMessage(m_hWnd, WM_LBUTTONUP, NULL,NULL);
	::SendNotifyMessage(m_hWnd, BN_CLICKED, MK_LBUTTON,NULL);

	CButton::OnRButtonUp(nFlags, point);
}

int CSwitchButton::GetCurSel()
{
	TRACE("%d \n", m_nSwitch);
	return m_nSwitch;
}

void CSwitchButton::InitButton(UINT firstBmp, UINT lastBmp, int nSwitch)

{
	m_nNumOfSwitch = lastBmp - firstBmp;
	m_nBmpResource = firstBmp;
	m_nSwitch = nSwitch;

}

void CSwitchButton::SetCurSel(int n)
{
	m_nSwitch = n;
	Invalidate();
}

⌨️ 快捷键说明

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