📄 led.cpp
字号:
// LED.cpp : 实现文件
//
#include "stdafx.h"
#include "SerialTest.h"
#include "LED.h"
#include ".\led.h"
// CLED
IMPLEMENT_DYNAMIC(CLED, CStatic)
CLED::CLED()
: m_CurValue(0)
, OverMax(false)
, OverMin(false)
, m_Title(_T(""))
{
m_CurValue = 0;
}
CLED::~CLED()
{
}
BEGIN_MESSAGE_MAP(CLED, CStatic)
ON_WM_PAINT()
ON_WM_ACTIVATE()
END_MESSAGE_MAP()
// CLED 消息处理程序
void CLED::OnPaint()
{
//bool blResult;
//CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CStatic::OnPaint()
DrawStatus();
}
void CLED::SetValue(float fValue)
{
m_CurValue = fValue;
if (fValue > m_maxValue )
{
OverMax = true;
OverMin = false;
}
else if (fValue < m_minValue )
{
OverMin = true;
OverMax = false;
}
else
{
OverMax = false;
OverMin = false;
}
//增加绘图调用
DrawStatus();
this->Invalidate(0);
}
float CLED::GetValue()
{
return m_CurValue;
}
void CLED::SetDotNum(int iValue)
{
m_DotNum = iValue;
}
int CLED::GetDotNum()
{
return m_DotNum;
}
void CLED::DrawStatus(void)
{
const int CST_LINEWIDTH = 1; //边框线的宽度
bool blResult;
CRect rect,lpRect;
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CStatic::OnPaint()
CDC *dcMem = new CDC();
CBitmap *bmOld;
blResult = dcMem->CreateCompatibleDC(&dc);
CBitmap *bmAct = new CBitmap();
CBitmap *bmNomal = new CBitmap();
CBitmap *bmMsk = new CBitmap();
bmAct->LoadBitmap(IDB_BMPRED);
bmMsk->LoadBitmap(IDB_BMPMASK);
bmNomal->LoadBitmap(IDB_BMPGREEN);
//绘制显示背景
COLORREF clBackGD = RGB(230,230,230);
COLORREF clRed = RGB(255,50,50);
COLORREF clRedFrame = RGB(200,0,0);
CPen *pen = new CPen(PS_SOLID,CST_LINEWIDTH,clRedFrame);
CBrush *brush = new CBrush(clBackGD);
GetWindowRect(&rect);
ScreenToClient(rect);
dc.SetBkColor(clBackGD);
dc.SetBkMode(OPAQUE);
/*
brushOld = dc.SelectObject(brush);
lpRect = CRect(2,2,rect.right-2,rect.bottom-2);
dc.FillRect(&lpRect,brush);
dc.SelectObject(brushOld);
*/
CPen *penOld = dc.SelectObject(pen);
dc.Rectangle(rect);
dc.SelectObject(penOld);
//绘制字体框
CBrush *brushOld = dc.SelectObject(brush);
lpRect = CRect(2,26,rect.right-2,rect.bottom-2);
dc.FillSolidRect(&lpRect,clBackGD);
//dc.FillRect(&lpRect,brush);
dc.SelectObject(brushOld);
lpRect = CRect((rect.right - 32)/3,6,16,16);
if (OverMax)
bmOld = dcMem->SelectObject(bmAct);
else
bmOld = dcMem->SelectObject(bmNomal);
dc.MaskBlt(lpRect.left,lpRect.top,lpRect.right,lpRect.bottom,dcMem,0,0,*bmMsk,0,0,MAKEROP4(SRCCOPY,SRCAND));
dcMem->SelectObject(bmOld);
lpRect = CRect((rect.right - 32)/3 * 2 + 16,6,16,16);
if (OverMin)
bmOld = dcMem->SelectObject(bmAct);
else
bmOld = dcMem->SelectObject(bmNomal);
dc.MaskBlt(lpRect.left ,lpRect.top,lpRect.right,lpRect.bottom,dcMem,0,0,*bmMsk,0,0,MAKEROP4(SRCCOPY,SRCAND));
dcMem->SelectObject(bmOld);
CFont ftTitle;
ftTitle.CreateFont(30,16,0,0,FW_BOLD,0,0,0,ANSI_CHARSET,
OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
VARIABLE_PITCH|FF_SWISS,_T("Impact"));
CFont *fntOld = dc.SelectObject(&ftTitle);
CString strVal;
strVal.Format("%4.1f",m_CurValue);
lpRect = CRect(0,30,rect.right,rect.bottom);
dc.SetTextColor(clRed);
dc.DrawText( strVal,lpRect,DT_CENTER);
dc.SelectObject(fntOld);
//this->UpdateWindow();
}
void CLED::IniControl(void)
{
DrawStatus();
}
void CLED::SetTitle(CString strValue)
{
m_Title = strValue;
}
CString CLED::GetTitle(void)
{
return m_Title;
}
void CLED::SetMinValue(float fValue)
{
m_minValue = fValue;
}
void CLED::SetMaxValue(float fValue)
{
m_maxValue = fValue;
}
void CLED::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CStatic::OnActivate(nState, pWndOther, bMinimized);
DrawStatus();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -