程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第七講 C#圖形開發高級篇(8)

C#發現之旅第七講 C#圖形開發高級篇(8)

編輯:關於C語言
這裡若控件處於新增簽 名軌跡的狀態,則將當前鼠標光標位置轉換為視圖坐標後添加到當前軌跡點坐標列表中。這 裡使用了另外一種用戶界面繪制過程。由於鼠標光標事件頻繁發生,一秒內可能發生幾十次 ,每發生一次需要在用戶界面上繪制一小段線條,此時采用髒矩形技術是不合適的。此時我 們可以調用控件的CreateGraphics對象,獲得該控件的圖像繪制對象,這有點類似Win32API 函數GetDC,我們可以直接使用這個圖形繪制對象來繪制用戶界面。這種方式跳過了控件重繪 事件處理機制,速度快,很適合頻繁的繪制用戶界面的操作。

控件還處理鼠標按鍵松 開事件,其代碼為

/// <summary>
/// 處理鼠標按鍵松開事件
/// </summary>
/// <param name="e">事件參數 </param>
protected override void OnMouseUp(MouseEventArgs e)
{
  base.OnMouseUp (e);
  if( this.Marking )
  {
    if( myCurrentLine != null )
    {
      System.Drawing.Rectangle rect = myCurrentLine.Bounds ;
      if( rect.Width > 5 || rect.Height >= 5 )
      {
         myCurrentInfo.Lines.Add( myCurrentLine);
      }
       myCurrentLine = null;
    }
  }
}

在這個代碼中 ,若當前處理的線條軌跡存在而且不是很小,則添加到當前簽名對象中去。此處判斷軌跡邊 界的大小是為了忽略用戶的誤操作,用戶可能不經意的點擊了鼠標按鍵,則程序會生成一個 軌跡信息,若這個軌跡太小,則程序就認為這個軌跡是誤操作,也就忽略掉該軌跡了。

其實在Windows操作系統判斷鼠標雙擊操作也采用類似的方法。用戶連續兩次快速按 下和松開鼠標按鍵,則用戶操作可能是雙擊操作,但也不一定是,此時Windows會判斷兩次鼠 標點擊操作的間隔時間和鼠標光標移動的距離,若間隔時間過長或者鼠標移動的距離過大, 則不是雙擊操作,而是兩個單擊操作,Windows這樣判斷也是為了減少用戶的誤操作。

測試控件

控件編寫好後我們就作了一個frmTest的窗體來測試這個用戶控件。 編譯程序,打開窗體設計器,在工具箱的我的用戶控件頁面中可以看到有一個 PenMakeControl的用戶控件,若沒有則鼠標右擊工具箱,選擇菜單項目“添加/移除項 目”。在對話框中點擊浏覽選擇剛剛編譯生成的EXE或DLL文件,然後選中 PenMarkControl即可在工具箱上新增PenMarkControl項目。我們在窗體上放置一個 PenMarkControl,再放置一些按鈕,添加一些代碼來測試這個控件的各種功能。

提交程序

設置程序的項目類型為類庫,重新編譯,生成一個DLL文件,這個DLL文件就是我們可 以提交給客戶的文件。

小結

在本課程中,我們一起研究了使用C#開發一個具 有一定復雜度的圖像軟件。在這個過程中我們了解了髒矩形技術,初步接觸了文檔對象模型 ,XML序列化。

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