VC++ 自定义控件---信号灯

VC++ 自定义控件

在项目中需要用到信号灯后,于是就自己定义了一个控件,这个控件继承自CStatic.

代码如下:

#pragma once
#include<afxwin.h>


// CCircleStatic

class CCircleStatic : public CStatic
{
	DECLARE_DYNAMIC(CCircleStatic)

public:
	CCircleStatic();
	virtual ~CCircleStatic();


protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnPaint();
	void SetBKColor(COLORREF color);
	void SetRect(CRect rect);

private:
	ULONG_PTR m_nToken;
	// 背景颜色
	COLORREF m_BkColor;
	// 圆形区域大小
	CRect    m_Rect;

};
#include "stdafx.h"
#include "HL.h"
#include "CircleStatic.h"
#include <Gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
using namespace Gdiplus;


// CCircleStatic

IMPLEMENT_DYNAMIC(CCircleStatic, CStatic)

CCircleStatic::CCircleStatic()
{
	Gdiplus::GdiplusStartupInput Gdiplus;
	Gdiplus::GdiplusStartup(&m_nToken,&Gdiplus,NULL);

	m_BkColor = RGB(255,0,0);
	m_Rect = CRect(0,0,20,20);
}

CCircleStatic::~CCircleStatic()
{
	if(m_nToken)
		Gdiplus::GdiplusShutdown(m_nToken);
}


BEGIN_MESSAGE_MAP(CCircleStatic, CStatic)
	ON_WM_PAINT()
END_MESSAGE_MAP()

// CCircleStatic 消息处理程序

void CCircleStatic::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码
	// 不为绘图消息调用 CStatic::OnPaint()
	Graphics graphics(dc.m_hDC);
	Color color;
	color.SetFromCOLORREF(m_BkColor);
	SolidBrush brush(color);
	Rect rect(m_Rect.left,m_Rect.top,m_Rect.Width(),m_Rect.Height());
	Color penColor;
	penColor.SetFromCOLORREF(RGB(0,0,0));
	Pen pen(penColor,2.0);
	graphics.DrawEllipse(&pen,rect);
	graphics.FillEllipse(&brush,rect);

}

void CCircleStatic::SetBKColor(COLORREF color)
{
	m_BkColor = color;
	Invalidate(TRUE);
}
void CCircleStatic::SetRect(CRect rect)
{
	m_Rect = rect;
}

项目使用效果:
在这里插入图片描述

在项目中可以指示一下位机的状态。好了,介绍就到这里了,后续如果有需要还可以扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值