首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

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

     編輯:關於C語言

XML 反序列化載入簽名文件


public static PenMarkInfoDocument Load(string fileName)
{
    using (XmlTextReader reader = new XmlTextReader(fileName))
    {
        XmlSerializer ser = new XmlSerializer(typeof(PenMarkInfoDocument));
        return (PenMarkInfoDocument)ser.Deserialize(reader);
    }
}

反序列化會建立新物件,無法注入既有實例。此模式也是 Web Service 傳輸基礎:伺服端序列化 → HTTP 傳輸 → 客戶端反序列化。

PenMarkControl 繪製邏輯


protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    // 捲動座標轉換
    e.Graphics.TranslateTransform(AutoScrollPosition.X, AutoScrollPosition.Y);
    Rectangle clip = e.ClipRectangle;
    clip.Offset(-AutoScrollPosition.X, -AutoScrollPosition.Y);

    var list = new ArrayList(myDocument);
    if (Marking) list.Add(myCurrentInfo);

    foreach (PenMarkInfo info in list)
        info.Draw(e.Graphics, clip);

    // 繪製焦點框
    if (myCurrentInfo != null)
        ControlPaint.DrawFocusRectangle(e.Graphics, myCurrentInfo.Bounds);
}
  • 使用 TranslateTransform 處理捲動座標系。
  • ClipRectangle 限制重繪區域,提升效能。
  • 正常筆跡與正在繪製的 myCurrentInfo 統一迴圈繪製。
  • 焦點框由 ControlPaint.DrawFocusRectangle 繪製。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved