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.

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.

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.

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.
