程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC制作電子八段管的仿真控件

VC制作電子八段管的仿真控件

編輯:vc教程

  經過了一個學期的考研生活,已經有好幾個月沒有看程序了,手都癢得很。終於考完了試,可以做點小玩意了。下個學期畢設,可能是要用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沒有發現。希望大家能夠指明和糾正。

  運行情況

  具體的運行效果請編譯好附帶源代碼後執行

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved