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

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

編輯:關於C語言

在本函數中首先是對圖形繪制對象和剪切矩形進行坐標轉化。 創建一個名為list的列表,列表中放置文檔中已經有的簽名對象和正在新建中的簽名對象, 然後遍歷所有的簽名對象,調用它們的Draw函數來繪制簽名圖形,最後根據當前簽名信息來 繪制焦點矩形,這裡的myCurrentInfo就是當前簽名信息對象。

這裡使用了類型 ControlPaint來繪制焦點矩形。在Windows用戶界面中,表示一個控件獲得輸入焦點,可以在 其界面上繪制焦點矩形。比如按鈕,當按鈕獲得焦點時,按紐裡就會繪制一個虛線的矩形邊 框,這個就是焦點矩形。類型ControlPaint中定義了一些靜態方法,用以模擬繪制一些 Windows標准控件的用戶界面,比如細邊框和3D的凸起或下陷邊框,模擬繪制菜單,單選框, 復選框等等。這個類型是一些Win32API函數的封裝,這些API函數有DrawEdge, DrawFrameControl等等,ControlPaint還提供一些方法能反轉屏幕上的像素,從而能實現橡 皮筋技術,而標准的Graphics對象是沒有像素反轉功能的。

PenMarkControl還重寫了 鼠標處理方法來實現新增簽名的功能。首先控件有兩種狀態,正在簽名狀態和普通狀態,當 控件處於正在簽名狀態,則用戶的鼠標拖拽操作就能增加新的簽名筆跡;否則用戶的鼠標拖 拽操作不會新增簽名筆跡。控件定義了一個名為Marking的屬性來表示控件是否處於新增簽名 狀態。其代碼如下

/// <summary>
/// 正在簽名中
/// </summary>
/// <remarks>若當前簽名對象存在而且還不屬於文檔則控件 處於新增簽名狀態</remarks>
public bool Marking
{
  get{ return myCurrentInfo != null && myDocument.Contains( myCurrentInfo ) == false ;}
}

控件定義了BeginMark和EndMark方法來開始和結束新增簽名 操作。其代碼為

/// <summary>
/// 開始進行新增簽名
/// </summary>
/// <param name="UserName">簽名者 </param>
/// <param name="LineWidth">簽名線條寬度 </param>
public void BeginMark( string UserName , int LineWidth )
{
  if( myCurrentInfo != null )
  {
     System.Drawing.Rectangle rect = myCurrentInfo.Bounds ;
    rect.Offset( this.AutoScrollPosition.X , this.AutoScrollPosition.Y );
     this.Invalidate( rect );
  }
  myCurrentInfo = new PenMarkInfo ();
  myCurrentInfo.Creator = UserName ;
   myCurrentInfo.CreationTime = DateTime.Now ;
  myCurrentInfo.LineWidth = LineWidth ;
}
/// <summary>
/// 結束新增簽名操作
/// </summary>
public void EndMark()
{
  if( this.Marking )
  {
    if( myCurrentInfo.Lines.Count > 0 )
    {
      myDocument.Add( myCurrentInfo );
    }
    else
    {
      myCurrentInfo = null;
    }
  }
}

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