Visual C# 2005 - 如何製作有趣小時鐘程式

摘要:Visual C# 2005 - 如何製作有趣小時鐘程式

一般來說,在 Windows XP 畫面的右下角會提示使用者目前的時間與日期,如果用點兩下右下角的時間或是日期文字後,會出現如圖表 1 所示之「日期和時間 內容」對話方塊。請注意對話方塊右方的小時鐘,時針、分針與秒針會隨著時間的流逝而改變位置,就好像真的時鐘一樣。現在,利用一些邏輯的推演與 .Net Framework 精巧的繪圖類別,也能夠輕易做出類似的效果,以下是我們的說明 

 


圖表
1
 

程式範例

 

圖表2 

圖表 2 所示者是程式範例的執行結果,在表單的 Load 事件處理常式中,計算繪製時鐘的半徑以及座標位置,當使用者調整時鐘所屬之表單大小時,表單會以雙重緩衝的控制模式,自動重繪時鐘的內容。之所以設定雙重緩衝,是為了減少表單重繪時所造成的畫面閃動,程式碼如下所列: 

private void Blog_DemoForm007_Load(object sender, EventArgs e)
{
 //
判斷表單的框線樣式是否為可調整的框線。
 
DoShowFrame = (this.FormBorderStyle == FormBorderStyle.Sizable);
 
 DemoClock = new Clock(this);
 
 //
取回矩型的寬度與高度座標。
 
ClientOffset = CalcClientLocation();
 
 //
計算時鐘半徑與座標。
 
CalcCircleSize();
 
 //
指定表單樣式位元,當控制項重新調整大小時,會重新繪製。
 
this.SetStyle(ControlStyles.ResizeRedraw, true);
 
 //
指定表單樣式位元,控制項會忽略視窗訊息WM_ERASEBKGND 以降低重繪閃動,
 //
控制項會自己繪製,作業系統不必執行,
 //
並且繪製已在緩衝區執行,繪製完成後將結果輸出至螢幕,
 //
設定雙重緩衝能避免控制項重繪時所造成的重繪閃動。
 
this.SetStyle(ControlStyles.AllPaintingInWmPaint |
   ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
}

使用者除了能夠改變表單的大小,還可以讓時鐘外圍的表單框架消失,如此一來小時鐘的外型就跟一般傳統的時鐘沒有什麼兩樣,如圖表 3 所示: 

 


圖表
3
 

也許您會問,在沒有表單外框的情況下,能不能夠用滑鼠拖拉的方式將小時鐘移動到想要的位置上?答案是肯定的。請在表單的 MouseDownMouseUp MouseMove 事件處理常式撰寫如下所示之程式碼:

 

private void Blog_DemoForm007_MouseDown(object sender, MouseEventArgs e)
{
 //
使用者按下滑鼠左鍵。
 
if (e.Button == MouseButtons.Left)
 {
  IsMouseDown = true;
  MouseOffset.X = e.X;
  MouseOffset.Y = e.Y;
 }
}

private void Blog_DemoForm007_MouseUp(object sender, MouseEventArgs e)
{
 IsMouseDown = false;
}

private void Blog_DemoForm007_MouseMove(object sender, MouseEventArgs e)
{
 //
移動表單位置。
 
if (IsMouseDown)
 {
  this.Location = new Point(
    this.Location.X + e.X - MouseOffset.X,
  this.Location.Y + e.Y - MouseOffset.Y);
 }
}

不久之後,我們還會完成一個更完整的小時鐘範例,加入更多更豐富的功能,例如:倒數計時、改變時鐘的顏色與漸層效果、顯示文字時鐘、以及時鐘功能設定檔等等,今天就先聊到這裡,下次再見。