程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用C#模擬時鐘表的一種簡單制作方法

使用C#模擬時鐘表的一種簡單制作方法

編輯:C#入門知識

1.GDI+圖形庫簡介
  1.1概述
  GDI+是Microsoft的新.NET Framework類庫用於圖形編程,因為它是.NET Framework的一部分,所以也是面對對象的。
  1.2設備環境和對象
  在GDI+中識別輸出設備的方式是使用設備環境DC對象,該對象存儲特定設備的信息並能把GDI+API函數調用轉換為要發送給該設備的指令,還可以查詢設備環境對象,確定對應的設備有什麼功能,這樣才能據此調整輸出結果。
  在GDI+中設備環境包裝在.NET基類System.Drawing.Graphics中,大多數繪圖工作都是調用Graphics的對象完成的。
  2.如何利用GDI+繪制時鐘表
  2.1時鐘表的各控件屬性的設置
  用C#中各控件制作一個指針式的時鐘放在桌面上顯示的界面。包括1個PictureBox控件、1個Timer控件、1個NotifyIcon控件及StatusStrip控件。
  2.2各控件的屬性設置
  Timer控件的Interval屬性值設置為1000,Enable屬性值設置為True;窗體的StartPosition屬性設置為CenterScreen,這個屬性使得鐘表在屏幕上中中央顯示。
  2.3功能實現代碼
  為實現該時鐘表功能,需要設計並輸入相應對象相應事件或過程的程序代碼。方法是:在設計狀態,雙擊相應控件,或雙擊控件的某一事件,並輸入相應的C#程序代碼。
  2.4通用聲明及時鐘表設計方法
  在程序中需要有一批變量或常量的定義,可事先在通用聲明中完成,代碼如下:
  const int s_pinlen = 100;//秒針長度
  const int m_pinlen = 75; //分針長度
  const int h_pinlen = 75; //時針長度
  PointF center = new PointF(s_pinlen +3, s_pinlen +3);//中心點位置
  SolidBrush sb = new SolidBrush(Color.Black);//時鐘圓心的刷子
  除上述變量聲明外,時鐘表功能編寫子方法,方法名為:AngleToPos和myClock,
  方法AngleToPos是根據角度和百分比計算出一個點的坐標函數,代碼如下:
  PointF AngleToPos(int angle, float percent)
  {
  PointF pos = new PointF();
  double radian = angle * Math.PI / 180;
  pos.Y = center.Y - s_pinlen * percent * (float)Math.Sin(radian);
  pos.X = center.X + s_pinlen * percent * (float)Math.Cos(radian);
  return pos;
  }
  方法myClock主要是繪制時鐘表的中心位置、秒針、分針及時針的結束位置。代碼如下:
  Pen pDisk=new Pen(Color.Orange,3);//時鐘背景的筆
  Pen pScale = new Pen(Color.Coral);//刻度的筆
  Graphics myGraphics = pictureBox1.CreateGraphics();
  myGraphics.Clear(Color.White);
  Pen myPen = new Pen(Color.Black,2);
  Point CPoint = new Point(s_pinlen , s_pinlen);
  Point SPoint = new Point((int)(CPoint.X + (Math.Sin(6 * s * Math.PI / 180)) * s_pinlen), (int)(CPoint.Y - (Math.Cos(6 * s * Math.PI / 180)) * s_pinlen));
  Point MPoint = new Point((int)(CPoint.X + (Math.Sin(6 * m * Math.PI / 180)) * m_pinlen), (int)(CPoint.Y - (Math.Cos(6 * m * Math.PI / 180)) * m_pinlen));
  Point HPoint = new Point((int)(CPoint.X + (Math.Sin(((30 * h) + (m / 2)) * Math.PI / 180)) * h_pinlen), (int)(CPoint.Y - (Math.Cos(((30 * h) + (m / 2)) * Math.PI / 180)) * h_pinlen));
  myGraphics.FillEllipse(sb, center.X -8, center.Y - 7, 14, 14);
  myGraphics.DrawLine(myPen, CPoint, SPoint);
  myPen = new Pen(Color.Blue , 4);
  myGraphics.DrawLine(myPen, CPoint, MPoint);
  myPen = new Pen(Color.Green , 6);
  myGraphics.DrawLine(myPen, CPoint, HPoint);
  myGraphics.DrawEllipse(pDisk, 1, 1, s_pinlen * 2, s_pinlen*2);//畫刻度
  for (int i = 0; i < 360; i += 6)
  {
  Pen tempPen = (i % 30 == 0) ? pDisk : pScale;
  PointF qidian = AngleToPos(i, 0.87f);
  PointF zhongdian= AngleToPos(i, 1.0f);
  myGraphics.DrawLine(tempPen, qingdian, zhongdian);
  }
  2.5 Timer的Tick事件中的代碼
  計時器控件代碼部分完成的功能是整個時鐘表的核心,其代碼如下:
  int h=DateTime.Now.Hour;
  int m = DateTime.Now.Minute;
  int s = DateTime.Now.Second;
  myClock(h, m, s);//調用畫時鐘表的方法
  toolStripStatusLabel1.Text = "當前時間:" + DateTime.Now.ToLongTimeString();
  3.結語
  編寫圖形代碼是計算機編程領域中比較復雜的工作之一,利於C#中GDI+動態地生成時鐘表,編寫程序的設計與實現是以數學科學的設計為基礎,以合理的設計思想為指導,以必要的程序設計語言為工具,基本上滿足了用戶的需要的時鐘表。
  
  參考文獻:
  [1]梁冰,呂雙.C#程序開發范例寶典(第2版).明日科技.人民郵電出版社,2009.10.
  [2]陳廣.C#程序設計基礎教程與實訓.北京大學出版社,2008.2.
  [3]劉莆迎.C#程序設計教程.電子工業出版社,2008.6.

    

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