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

📄 led.cpp

📁 开发环境为VC++ 的数据库管理系统
💻 CPP
字号:

#include "stdafx.h"
#include "Led.h"
#include "..\resource.h"

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



#define LED_BLINK_TIMER 1
#define LED_SIZE 32

CLed::CLed()
{
	m_hIconRed = NULL;
	m_hIconGreen = NULL;
	m_hIconOff = NULL;
	m_hCurrentIcon = NULL;
	
	m_nLedColor = LED_COLOR_OFF;
	m_nTimerID = 0;
}

CLed::~CLed()
{
	if (m_hIconRed)
		DestroyIcon(m_hIconRed);
	if (m_hIconGreen)
		DestroyIcon(m_hIconGreen);
	if (m_hIconOff)
		DestroyIcon(m_hIconOff);
}


BEGIN_MESSAGE_MAP(CLed, CStatic)
	//{{AFX_MSG_MAP(CLed)
	ON_WM_PAINT()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/********************************************************************/
/*																	*/
/* Function name : PreSubclassWindow								*/
/* Description   : Initialize stuff.								*/
/*																	*/
/********************************************************************/
void CLed::PreSubclassWindow() 
{
	m_hIconRed = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_LED_RED),
				 IMAGE_ICON, LED_SIZE, LED_SIZE, LR_SHARED);
	m_hIconGreen = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_LED_GREEN),
				 IMAGE_ICON, LED_SIZE, LED_SIZE, LR_SHARED);
	m_hIconOff = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_LED_OFF),
				 IMAGE_ICON, LED_SIZE, LED_SIZE, LR_SHARED);

	// default led 'color' is off
	m_hCurrentIcon = m_hIconOff;
	CStatic::PreSubclassWindow();
}


/********************************************************************/
/*																	*/
/* Function name : OnPaint											*/
/* Description   : Paint the led.									*/
/*																	*/
/********************************************************************/
void CLed::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	if (m_hCurrentIcon)
	{
		dc.DrawState(CPoint(0,0), CSize(LED_SIZE, LED_SIZE), (HICON)m_hCurrentIcon, DST_ICON | IsWindowEnabled() ? DSS_NORMAL : DSS_DISABLED, (CBrush *)NULL);	
	}
}


/********************************************************************/
/*																	*/
/* Function name : SetLedColor										*/
/* Description   : Set the color of the led. 						*/
/*																	*/
/********************************************************************/
void CLed::SetLedColor(int nLedColor)
{
	m_nLedColor = nLedColor;
	switch(nLedColor)
	{
		case LED_COLOR_RED:
			m_hCurrentIcon = m_hIconRed;
			break;
		case LED_COLOR_GREEN:
			m_hCurrentIcon = m_hIconGreen;
			break;
		default:
			m_hCurrentIcon = m_hIconOff;
			break;
	}
	Invalidate();
	UpdateWindow();
}


/********************************************************************/
/*																	*/
/* Function name : OnTimer											*/
/* Description   : Handle blinking.			 						*/
/*																	*/
/********************************************************************/
void CLed::OnTimer(UINT nIDEvent) 
{
	if (nIDEvent == m_nTimerID)
	{
		m_bBlinkState = !m_bBlinkState;
		if (!m_bBlinkState)
		{
			SetLedColor(m_nLedColor);
		}
		else
		{
			m_hCurrentIcon = m_hIconOff;
			Invalidate();
			UpdateWindow();
		}
	}
	CStatic::OnTimer(nIDEvent);
}


/********************************************************************/
/*																	*/
/* Function name : SetBlinking										*/
/* Description   : Set blinking on/off.		 						*/
/*																	*/
/********************************************************************/
void CLed::SetBlinking(BOOL bOn)
{
	if (bOn)
	{
		m_bBlinkState = FALSE;
		KillTimer(m_nTimerID);
		m_nTimerID = SetTimer(LED_BLINK_TIMER, 500, NULL);
	}
	else
	{
		KillTimer(m_nTimerID);
		m_nTimerID = 0;
	}
}

⌨️ 快捷键说明

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