📄 led.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 + -