Mürekkep Nesnesi Modeli: Windows Forms ve WPF'ye Karşı COM

dijital mürekkebi destekleyen temel üç platform vardır: tablet pc Windows Forms platformu, tablet pc COM platformu ve Windows Presentation Foundation (WPF) platformu. Windows Forms ve COM platformları benzer bir nesne modeli paylaşır, ancak WPF platformunun nesne modeli önemli ölçüde farklıdır. Bu konu, bir nesne modeliyle çalışan geliştiricilerin diğerini daha iyi anlayabilmesi için üst düzey farklılıkları ele almaktadır.

Bir uygulamada mürekkep sağlama

Üç platformun hepsi, bir uygulamanın tablet kalemden giriş almasını sağlayan nesneler ve denetimler sağlar. Windows Forms ve COM platformları microsoft. ınk. ınkpicture, microsoft. ınk. ınkedıt, Microsoft. ink. ınkoverlay ve Microsoft. ink. ınkcollector sınıflarıyla birlikte teslim. Microsoft. Ink. InkPicture ve Microsoft. Ink. ınkedıt , mürekkep toplamak için bir uygulamaya ekleyebileceğiniz denetimlerdir. Microsoft. Ink. InkOverlay ve Microsoft. Ink. InkCollector , mevcut bir pencereye mürekkeple eklenebilir-Windows ve özel denetimleri etkinleştirir.

WPF platformu, denetimini içerir InkCanvas . Uygulamanıza bir ekleyebilirsiniz InkCanvas ve hemen mürekkep toplamaya başlayabilirsiniz. İle, InkCanvas Kullanıcı mürekkep kopyalayabilir, seçebilir ve yeniden boyutlandırabilir. Diğer denetimleri öğesine ekleyebilirsiniz InkCanvas ve Kullanıcı da bu denetimlerin üzerine el yazısı ekleyebilir. Bir InkPresenter öğesine ekleyerek ve ekran kalemi noktalarını toplayarak mürekkep etkin bir özel denetim oluşturabilirsiniz.

Aşağıdaki tabloda, bir uygulamada mürekkep etkinleştirme hakkında daha fazla bilgi verilmektedir:

Bunu yapmak için... WPF platformunda... Windows Forms/COM platformlarında...
Uygulamaya mürekkep etkin bir denetim ekleme Bkz. mürekkeple çalışmayabaşlama. Bkz. otomatik talep formu örneği
Özel denetimde mürekkebi etkinleştirme Bkz. mürekkep girişi denetimi oluşturma. Bkz. mürekkep panosu örneği.

Mürekkep verileri

Windows Forms ve COM platformlarında microsoft. ınk. ınkcollector, microsoft. ınk. ınkoverlay, Microsoft. ink. ınkedıtve microsoft. ınk. ınkpicture her biri bir Microsoft. ınk. ink nesnesi sunar. Microsoft. Ink. ink nesnesi bir veya daha fazla Microsoft. ink. Stroke nesnesine ilişkin verileri içerir ve bu konturları yönetmek ve işlemek için ortak yöntemleri ve özellikleri sunar. Microsoft. Ink. ink nesnesi, içerdiği vuruşların ömrünü yönetir; Microsoft. Ink. ink nesnesi, sahip olduğu konturları oluşturur ve siler. Her Microsoft. Ink. Stroke , üst Microsoft. Ink. ink nesnesi içinde benzersiz olan bir tanımlayıcıya sahiptir.

WPF platformunda, System.Windows.Ink.Stroke sınıfı kendi ömrünü kullanır ve yönetir. Bir nesne grubu StrokeStrokeCollection , isabet testi, silme, dönüştürme ve seri hale getirme gibi ortak mürekkep veri yönetimi işlemlerine yönelik yöntemler sağlayan bir içinde birlikte toplanabilir. StrokeHerhangi bir zamanda sıfır, bir veya daha fazla nesneye ait olabilir StrokeCollection . Bir Microsoft. Ink. ink nesnesine sahip olmak yerine, ve InkPresenter içerir System.Windows.Ink.StrokeCollection .

Aşağıdaki çizimler çifti, mürekkep verileri nesne modellerini karşılaştırır. Windows Forms ve COM platformlarında, microsoft. ınk. ink nesnesi microsoft. ınk. Stroke nesnelerinin ömrünü kısıtlar ve ekran kalemi paketleri tek vuruşlara aittir. Aşağıdaki çizimde gösterildiği gibi, iki veya daha fazla vuruş aynı Microsoft. Ink. DrawingAttributes nesnesine başvurabilir.

Diagram of the Ink Object Model for COM/Winforms.

WPF üzerinde her biri, bir System.Windows.Ink.Stroke şeyin başvurusu olduğu sürece var olan ortak bir dil çalışma zamanı nesnesidir. Her biri StrokeStylusPointCollectionSystem.Windows.Ink.DrawingAttributes aynı zamanda ortak dil çalışma zamanı nesneleri olan bir ve nesnesine başvurur.

Diagram of the Ink Object Model for WPF.

aşağıdaki tabloda WPF platformunda ve Windows Forms ve COM platformlarında bazı ortak görevlerin nasıl yerine getirileceğini karşılaştırılmaktadır.

Görev Windows Presentation Foundation Windows Forms ve COM
Mürekkebi Kaydet Save Microsoft. Ink. Ink. Save
Mürekkebi yükle StrokeCollectionOluşturucuya sahip oluşturun StrokeCollection . Microsoft. Ink. Ink. Load
İsabet testi HitTest Microsoft. Ink. Ink. HitTest
Mürekkebi Kopyala CopySelection Microsoft. Ink. Ink. ClipboardCopy
Mürekkebi Yapıştır Paste Microsoft. Ink. Ink. ClipboardPaste
Bir vuruş koleksiyonunda özel özelliklere erişin AddPropertyData (Özellikler dahili olarak depolanır ve AddPropertyData , ve ile erişilir RemovePropertyDataContainsPropertyData ) Microsoft. Ink. Ink. ExtendedProperties kullanın

Platformlar arasında mürekkep paylaşma

Platformlar, mürekkep verileri için farklı nesne modellerine sahip olsa da, verilerin platformlar arasında paylaşılması çok kolaydır. aşağıdaki örnekler bir Windows Forms uygulamasından mürekkep kaydeder ve mürekkebi bir Windows Presentation Foundation uygulamasına yükler.

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

aşağıdaki örnekler bir Windows Presentation Foundation uygulamasından mürekkep kaydeder ve mürekkebi bir Windows Forms uygulamasına yükler.

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

Tablet kalemden olaylar

Windows Forms ve COM platformları üzerindeki microsoft. ınk. ınkoverlay, microsoft. ink. ınkcollectorve microsoft. ınk. ınkpicture , kullanıcı kalem verilerini girdinken olayları alır. Microsoft. Ink. InkOverlay veya Microsoft. Ink. InkCollector bir pencereye veya denetime iliştirilir ve tablet giriş verileri tarafından oluşturulan olaylara abone olabilir. Bu olayların gerçekleştiği iş parçacığı, olayların bir kalem, fare veya program aracılığıyla yapılıp yapılmayacağını gösterir. Bu olaylarla ilgili olarak iş parçacığı oluşturma hakkında daha fazla bilgi için bkz. bir olayın Tetiklebileceğigenel iş parçacığı konuları ve iş parçacıkları.

Windows Presentation Foundation platformunda, UIElement sınıfında kalem girişi için olaylar vardır. Bu, her denetim, ekran kalemi olaylarının tam kümesini kullanıma sunmasıdır. Ekran kalemi olayları tünel/kabarcıklanma olay çiftlerine sahiptir ve uygulama iş parçacığında her zaman gerçekleşir. Daha fazla bilgi için bkz. yönlendirilmiş olaylara genel bakış.

Aşağıdaki diyagramda, ekran kalemi olaylarını oluşturan sınıfların nesne modellerini karşılaştıran gösterilmektedir. Windows Presentation Foundation nesne modeli, tünel olayı karşılıklarından değil yalnızca kabarcıklanma olaylarını gösterir.

Diagram of the Stylus events in WPF vs Winforms.

Kalem verileri

Üç platformda de bir tablet kalemden gelen verileri kesmeye ve düzenlemeye yönelik yollar sağlanır. Windows Forms ve COM platformlarında, bu, bir microsoft. StylusInput. RealTimeStylusoluşturularak, bir pencere veya denetim iliştirilerek ve microsoft. StylusInput. ıstylussyncplugin ya da microsoft. StylusInput. ıstylusasyncplugin arabirimini uygulayan bir sınıf oluşturularak elde edilir. Özel eklenti daha sonra Microsoft. StylusInput. RealTimeStylusöğesinin eklenti koleksiyonuna eklenir. Bu nesne modeli hakkında daha fazla bilgi için bkz. StylusInput API 'Leri mimarisi.

WPF platformunda, UIElement sınıf, UIElement' ye benzer bir şekilde eklentiler koleksiyonu sunar. Kalem verilerini ele almak için öğesinden devralan bir sınıf oluşturun StylusPlugIn ve StylusPlugIns koleksiyonuna ekleyin UIElement . Bu etkileşim hakkında daha fazla bilgi için bkz. ekran kaleminden girişi önleme.

Tüm platformlarda, bir iş parçacığı havuzu, ekran kalemi olayları aracılığıyla mürekkep verilerini alır ve bunu uygulama iş parçacığına gönderir. COM ve Windows platformlarındaki iş parçacığı hakkında daha fazla bilgi için bkz. StylusInput apı 'leri için iş parçacığı oluşturma konuları. Windows sunu yazılımında iş parçacığı oluşturma hakkında daha fazla bilgi için bkz. mürekkep iş parçacığı modeli.

Aşağıdaki çizim kalem iş parçacığı havuzunda kalem verileri alan sınıfların nesne modellerini karşılaştırır.

Diagram of the StylusPlugin model WPF vs Winforms.