当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 电子八段管的仿真控件

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 电子八段管的仿真控件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 60 ::
收藏到网摘: n/a

电子八段管的仿真控件


作者:kevin cheng


下载源代码

 
  经过了一个学期的考研生活,已经有好几个月没有看程序了,手都痒得很。终于考完了试,可以做点小玩意了。下个学期毕设,可能是要用PIC单片机做模拟系统控制程序。电压,电流采集测量烦得很,今天作这个电子8段管仿真程序就算是提前作个准备吧。

用途
  我想电子8段管对大家来说并不是很陌生吧。很多电子设备(如手表,计时器等)都有他们的身影。这个程序就是在计算机上实现对电子8段管的仿真,主要用于对外设输入量进行显示。比如说在用RC电路搭接模拟系统仿真设计时,需要测量各种电压,电流值,我们就可以通过AD转换器把各种模拟量采集到计算机内。 然后通过这个8段管显示出来,一个很简单的数字电压计就搞定了。

本文的示例程序界面如图一所示,移动列表项后的示例如图二所示:


图一


图二

程序说明
  程序主要目的是实现对模拟8段管类CNumPane功能的封装:主要功能函数如下:

class CNumPane : public CStatic{public:	CNumPane(BOOL bIsShow = FALSE);public:	void Restore(); //将CEPane内各个参数恢复初始设定值	BOOL bIsShowBackGround; //属性,是否要绘制8段管的背景数字	void SetBackNumColor(COLORREF ref);	// 设置背景数字的颜色	void SetNumColor(COLORREF ref); // 设置前景数字的颜色	void SetBorderColor(COLORREF ref); // 设置控件边框的颜色	void SetBackGroundColor(COLORREF ref); // 设置控件的背景颜色	void SetShowNumber(CString str);	// 设置控件要显示的数字, //可以提供float型或者CString型	void SetShowNumber(float f);}; 
通过对这些功能的调用就可以实现对8段管的控制。
内部还辅助定义了一个属于8段管单元的结构:(这个结构主要是用来存储每个8段管的具体坐标和提供相应的绘制功能)
struct Pane8{	CPoint m_leftup;	CPoint m_rightup;	CPoint m_leftmid;	CPoint m_rightmid;	CPoint m_leftbottom;	CPoint m_rightbottom; // 对应8段管6个定点坐标	CDC * pDC;	void DrawA()	//以下是对A-G段的绘制,用很简单的LineTo做的	..... // 以下绘制0-9 10个数字,''-''和''.''符号	void Draw9()	.....}; 
  程序实现的重点是CNumPane::MakeCoordinate()函数,通过这个函数,在控件大小和要显示数据确定后,计算出每个8段管的关键坐标,构建一个Pane8的数组 pItem来存储坐标值。(具体实现过程,程序源码上有详细介绍)

不足之处
  对于8段管绘图时处理比较简单,就是MoveTo,LineTo画的,没有作出立体效果。并且由于是自己一时突发奇想要作这么个东西,用了3个小时就草草完工了,可能还有一些隐藏的Bug没有发现。希望大家能够指明和纠正。s

运行情况
  具体的运行效果请编译好附带源代码后执行。本示例在Visual C++ 6.0 和 Window XP/98下编译运行通过。