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

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

編輯:關於C語言

在BeginMark中,程序重新設置了當前簽名信息對象為新對象,而且新對 象還未加入到文檔中,此時Marking 屬性返回true。

在EndMark中,若正在新增的簽 名信息包含了至少一條簽名筆跡則將對象添加到文檔中,否則刪除當前簽名信息對象,此時 Marking屬性返回false。

這個控件重寫了鼠標按鍵按下事件處理來開始新增簽名軌跡 ,其代碼為

/// <summary>
/// 當前處理的線條點集合
/// </summary>
private PointArrayList myCurrentLine = null;
/// <summary>
/// 最後一次點坐標
/// </summary>
private System.Drawing.Point LastPoint = System.Drawing.Point.Empty ;
/// <summary>
/// 處理鼠標按鍵按下事件
/// </summary>
/// <param name="e"></param>
protected override void OnMouseDown(MouseEventArgs e)
{
  base.OnMouseDown (e);
  if( this.Marking )
  {
    // 正在簽名
    myCurrentLine = new PointArrayList();
    LastPoint = new Point( e.X , e.Y );
   }
  else
  {
    // 判斷鼠標光標是否命中某個簽名的線條
    int x = e.X - this.AutoScrollPosition.X ;
    int y = e.Y - this.AutoScrollPosition.Y ;
    foreach( PenMarkInfo info in myDocument )
    {
      // 判斷鼠標光標是否命中某個簽名的某 個線條
      foreach( PointArrayList line in info.Lines )
       {
        foreach( Point p in line )
        {
          double r = ( p.X - x ) * ( p.X - x ) + ( p.Y - y ) * ( p.Y - y );
          if( r < 13 )
          {
            System.Drawing.Rectangle rect = info.Bounds ;
             if( myCurrentInfo != null )
            {
              rect = System.Drawing.Rectangle.Union( rect , myCurrentInfo.Bounds );
              rect.Offset( this.AutoScrollPosition.X , this.AutoScrollPosition.Y );
             }
            myCurrentInfo = info ;
             this.Invalidate( rect );
            goto EndElse ;
          }
        }
      }
    }
  EndElse: ;
  }
}

當用戶按下鼠標按鍵時,若控件 處於新增簽名狀態則開始一條簽名軌跡操作,初始化一些全局變量。若控件不是新增簽名狀 態,則修正鼠標光標坐標,並查找鼠標光標下簽名對象,在這裡判斷鼠標光標和某個簽名軌 跡上的某點的距離的平方是否小於13,若找到這個簽名對象則設置該簽名對象為當前簽名對 象。然後聲明控件的部分界面無效,需要重新繪制。

聲明控件用戶界面無效是調用控 件的Invalidate方法,若帶參數則聲明用戶界面部分無效,參數是一個矩形,在將來要調用 的OnPaint方法的剪切矩形就是這個參數。若無參數的調用Invalidate方法,則是聲明整個控 件的用戶界面無效,全部需要重新繪制。

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