Sdílet prostřednictvím


Model inkoustových objektů: Windows Forms a COM vzhledem k platformě WPF

Existují v podstatě tři platformy, které podporují digitální rukopis: tablet PC model Windows Forms platformu, platformu COM pro Tablet PC a platformu WINDOWS Presentation Foundation (WPF). Platformy model Windows Forms a MODELU COM sdílejí podobný objektový model, ale objektový model pro platformu WPF se podstatně liší. Toto téma popisuje rozdíly na vysoké úrovni, aby vývojáři, kteří pracovali s jedním objektovým modelem, lépe porozuměli ostatním.

Povolení rukopisu v aplikaci

Všechny tři platformy dodávají objekty a ovládací prvky, které aplikaci umožňují přijímat vstup z pera pro tablet. Platformy model Windows Forms a COM se dodávají s třídami Microsoft.InkPicture, Microsoft.InkEdit, Microsoft.InkOverlay a Microsoft.InkCollector. Microsoft.InkPicture a Microsoft.Ink.InkEdit jsou ovládací prvky, které můžete přidat do aplikace pro shromažďování rukopisu. Microsoft.Ink.InkOverlay a Microsoft.InkCollector je možné připojit k existujícímu oknem pro povolení rukopisu a vlastních ovládacích prvků.

Platforma WPF zahrnuje InkCanvas ovládací prvek. Do aplikace můžete přidat rukopis InkCanvas a začít okamžitě shromažďovat rukopis. Uživatel může pomocí příkazu InkCanvaskopírovat, vybírat a měnit velikost rukopisu. Do tohoto InkCanvasprvku můžete přidat další ovládací prvky a uživatel může tyto ovládací prvky přepsat také. Vlastní ovládací prvek s podporou rukopisu můžete vytvořit tak, že do něj přidáte a InkPresenter shromažďujete jeho body pera.

V následující tabulce najdete další informace o povolení rukopisu v aplikaci:

Akce Na platformě WPF... Na platformách model Windows Forms/COM...
Přidání ovládacího prvku s podporou rukopisu do aplikace Viz Začínáme s rukopisem. Viz ukázka formuláře automatické deklarace identity
Povolení rukopisu ve vlastním ovládacím prvku Viz Vytvoření vstupního ovládacího prvku rukopisu. Viz Ukázka schránky rukopisu.

Data rukopisu

Na platformách model Windows Forms a COM microsoft.InkCollector, Microsoft.InkOverlay, Microsoft.InkEdit a Microsoft.InkPicture zpřístupňují objekt Microsoft.Ink.Ink.InkPicture. Objekt Microsoft.Ink.Ink obsahuje data jednoho nebo více objektů Microsoft.Ink.Stroke a zveřejňuje běžné metody a vlastnosti pro správu a manipulaci s těmito tahy. Objekt Microsoft.Ink.Ink spravuje životnost tahů, které obsahuje. Objekt Microsoft.Ink.Ink vytvoří a odstraní tahy, které vlastní. Každý Microsoft.Ink.Stroke má identifikátor, který je jedinečný v rámci nadřazeného objektu Microsoft.Ink.Ink .

Na platformě System.Windows.Ink.Stroke WPF třída vlastní a spravuje vlastní životnost. Skupinu objektů lze shromažďovat společně v objektechStrokeCollection, která poskytuje metody pro běžné operace správy rukopisných Stroke dat, jako je testování, mazání, transformace a serializace rukopisu. A Stroke může v každém okamžiku patřit k nule, jednomu nebo více StrokeCollection objektům. Místo objektu Microsoft.Ink.InkInkCanvas a InkPresenter obsahovat .System.Windows.Ink.StrokeCollection

Následující dvojice ilustrací porovnává modely datových objektů rukopisu. Na platformě model Windows Forms a MODELU COM omezuje objekt Microsoft.Ink.Ink životnost objektů Microsoft.Ink.Stroke a pakety pera patří jednotlivým tahům. Dva nebo více tahů mohou odkazovat na stejný objekt Microsoft.Ink.DrawingAttributes , jak je znázorněno na následujícím obrázku.

Diagram of the Ink Object Model for COM/Winforms.

Ve WPF je každý System.Windows.Ink.Stroke objekt modulu CLR (Common Language Runtime), který existuje, pokud na něj něco odkazuje. Každá Stroke odkazuje na StylusPointCollection objekt a System.Windows.Ink.DrawingAttributes objekt, což jsou také objekty modulu CLR (Common Language Runtime).

Diagram of the Ink Object Model for WPF.

Následující tabulka porovnává, jak provádět některé běžné úlohy na platformě WPF a platformy model Windows Forms a modelu COM.

Úkol Windows Presentation Foundation model Windows Forms a com
Uložit rukopis Save Microsoft.Ink.Ink.Save
Načíst rukopis Vytvořte s konstruktorem StrokeCollectionStrokeCollection . Microsoft.Ink.Ink.Load
Test hitu HitTest Microsoft.Ink.Ink.HitTest
Kopírovat rukopis CopySelection Microsoft.Ink.Ink.ClipboardCopy
Vložit rukopis Paste Microsoft.Ink.Ink.ClipboardPaste
Přístup k vlastním vlastnostem v kolekci tahů AddPropertyData (vlastnosti jsou uloženy interně a přístupné prostřednictvím AddPropertyData, RemovePropertyDataa ContainsPropertyData) Použití Microsoft.Ink.Ink.ExtendedProperties

Sdílení rukopisu mezi platformami

I když platformy mají různé objektové modely pro data rukopisu, sdílení dat mezi platformami je velmi snadné. Následující příklady ukládají rukopis z aplikace model Windows Forms a načtou rukopis do aplikace Windows Presentation Foundation.

using Microsoft.Ink;
using System.Drawing;
Imports Microsoft.Ink
Imports System.Drawing
/// <summary>
/// Saves the digital ink from a Windows Forms application.
/// </summary>
/// <param name="inkToSave">An Ink object that contains the
/// digital ink.</param>
/// <returns>A MemoryStream containing the digital ink.</returns>
MemoryStream SaveInkInWinforms(Ink inkToSave)
{
    byte[] savedInk = inkToSave.Save();

    return (new MemoryStream(savedInk));
}
'/ <summary>
'/ Saves the digital ink from a Windows Forms application.
'/ </summary>
'/ <param name="inkToSave">An Ink object that contains the 
'/ digital ink.</param>
'/ <returns>A MemoryStream containing the digital ink.</returns>
Function SaveInkInWinforms(ByVal inkToSave As Ink) As MemoryStream 
    Dim savedInk As Byte() = inkToSave.Save()
    
    Return New MemoryStream(savedInk)

End Function 'SaveInkInWinforms
using System.Windows.Ink;
Imports System.Windows.Ink

/// <summary>
/// Loads digital ink into a StrokeCollection, which can be
/// used by a WPF application.
/// </summary>
/// <param name="savedInk">A MemoryStream containing the digital ink.</param>
public void LoadInkInWPF(MemoryStream inkStream)
{
    strokes = new StrokeCollection(inkStream);
}
'/ <summary>
'/ Loads digital ink into a StrokeCollection, which can be 
'/ used by a WPF application.
'/ </summary>
'/ <param name="savedInk">A MemoryStream containing the digital ink.</param>
Public Sub LoadInkInWPF(ByVal inkStream As MemoryStream) 
    strokes = New StrokeCollection(inkStream)

End Sub

Následující příklady ukládají rukopis z aplikace Windows Presentation Foundation a načtou rukopis do model Windows Forms aplikace.

using System.Windows.Ink;
Imports System.Windows.Ink

/// <summary>
/// Saves the digital ink from a WPF application.
/// </summary>
/// <param name="inkToSave">A StrokeCollection that contains the
/// digital ink.</param>
/// <returns>A MemoryStream containing the digital ink.</returns>
MemoryStream SaveInkInWPF(StrokeCollection strokesToSave)
{
    MemoryStream savedInk = new MemoryStream();

    strokesToSave.Save(savedInk);

    return savedInk;
}
'/ <summary>
'/ Saves the digital ink from a WPF application.
'/ </summary>
'/ <param name="inkToSave">A StrokeCollection that contains the 
'/ digital ink.</param>
'/ <returns>A MemoryStream containing the digital ink.</returns>
Function SaveInkInWPF(ByVal strokesToSave As StrokeCollection) As MemoryStream 
    Dim savedInk As New MemoryStream()
    
    strokesToSave.Save(savedInk)
    
    Return savedInk

End Function 'SaveInkInWPF

using Microsoft.Ink;
using System.Drawing;
Imports Microsoft.Ink
Imports System.Drawing
/// <summary>
/// Loads digital ink into a Windows Forms application.
/// </summary>
/// <param name="savedInk">A MemoryStream containing the digital ink.</param>
public void LoadInkInWinforms(MemoryStream savedInk)
{
    theInk = new Ink();
    theInk.Load(savedInk.ToArray());
}
'/ <summary>
'/ Loads digital ink into a Windows Forms application.
'/ </summary>
'/ <param name="savedInk">A MemoryStream containing the digital ink.</param>
Public Sub LoadInkInWinforms(ByVal savedInk As MemoryStream) 
    theInk = New Ink()
    theInk.Load(savedInk.ToArray())

End Sub

Události z pera pro tablet

Microsoft.Ink.InkOverlay, Microsoft.Ink.InkCollector a Microsoft.InkPicture na platformě model Windows Forms a COM přijímají události, když uživatel zadá data pera. Microsoft.Ink.InkOverlay nebo Microsoft.InkCollector je připojen k okně nebo ovládacímu prvku a může se přihlásit k odběru událostí vyvolaných vstupními daty tabletu. Vlákno, na kterém k těmto událostem dochází, závisí na tom, zda jsou události vyvolány perem, myší nebo programově. Další informace o vláknech ve vztahu k těmto událostem naleznete v tématu Obecné aspekty vláken a vlákna, ve kterých se událost může aktivovat.

Na platformě UIElement Windows Presentation Foundation má třída události pro zadávání perem. To znamená, že každý ovládací prvek zveřejňuje úplnou sadu událostí stylus. Události pera mají dvojice událostí tunelování nebo bublání a vždy se vyskytují ve vlákně aplikace. Další informace najdete v přehledu směrovaných událostí.

Následující diagram znázorňuje porovnání objektových modelů pro třídy, které vyvolávají stylus události. Objektový model Windows Presentation Foundation zobrazuje pouze bublinové události, nikoli protějšek událostí tunelování.

Diagram of the Stylus events in WPF vs Winforms.

Data pera

Všechny tři platformy poskytují způsoby, jak zachytit a manipulovat s daty pocházejícími z pera pro tablet. Na platformě model Windows Forms a COM toho dosáhnete vytvořením rozhraní Microsoft.StylusInput.RealTimeStylus, připojením okna nebo ovládacího prvku a vytvořením třídy, která implementuje Rozhraní Microsoft.StylusInput.IStylusSyncPlugin nebo Microsoft.StylusInput.IStylusAsyncPlugin. Vlastní modul plug-in se pak přidá do kolekce modulů plug-in microsoft.StylusInput.RealTimeStylus. Další informace o tomto objektovém modelu naleznete v tématu Architektura rozhraní StylusInput API.

Na platformě UIElement WPF třída zveřejňuje kolekci modulů plug-in, podobně jako v návrhu Microsoft.StylusInput.RealTimeStylus. Chcete-li zachytit data pera, vytvořte třídu, která dědí z StylusPlugIn a přidá objekt do StylusPlugIns kolekce objektu UIElement. Další informace o této interakci naleznete v tématu Zachycení vstupu z pera.

Fond vláken na všech platformách přijímá data rukopisu prostřednictvím událostí pera a odesílá je do vlákna aplikace. Další informace o vláknech na platformě COM a Windows naleznete v tématu Důležité informace o vláknech pro rozhraní STYLUsInput API. Další informace o vláknech v prezentačním softwaru systému Windows naleznete v tématu Model rukopisných vláken.

Následující obrázek porovnává objektové modely tříd, které přijímají data pera ve fondu vláken pera.

Diagram of the StylusPlugin model WPF vs Winforms.