Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet illustrerar två metoder för att hitta bläck, givet en plats på skärmen.
Följande funktioner används i det här exemplet:
- Använda en bläckuppsamlare
- Genomföra ett träfftest
- Hitta närmaste punkt
Åtkomst till ink-API:et
Börja med att referera till Tablet PC-klasserna, som finns i Windows Vista eller Windows XP Tablet PC Edition Software Development Kit (SDK).
using Microsoft.Ink;
Hantera inläsnings- och målningshändelser för formulär
Formulärets lasthändelsehanterare:
- Skapar ett InkCollector- objekt, ic, för formuläret.
- Anger objektets InkCollector egenskap CollectionMode för att ignorera gester.
- Aktiverar InkCollector-.
- Sätter egenskapen AutoRedraw för InkCollector-objektet till TRUE.
// Create the InkCollector, and turn it on
ic = new InkCollector(Handle); // attach it to the form's frame window
// default to ink-enabled mode
mode = ApplicationMode.Ink;
ic.CollectionMode = CollectionMode.InkOnly;
// turn the collector on
ic.Enabled = true;ic.AutoRedraw = true;
Formulärets Paint-händelsehanterare kontrollerar programläget:
- I HitTest-läget målar den en cirkel runt markören. Den aktiva pennan anges i programmets handleHitTest-metod.
- I NearestPoint-läget målas en röd linje mellan markören och punkten närmast markören. Den närmaste punkten beräknas i programmets handleNearestPoint-metod.
if( mode == ApplicationMode.HitTest)
{
e.Graphics.DrawEllipse(activepen, penPt.X - HitSize/2, penPt.Y - HitSize/2, HitSize, HitSize);
}
else if( mode == ApplicationMode.NearestPoint )
{
e.Graphics.DrawLine(redPen, penPt, nearestPt);
}
Det här exemplet har en mycket enkel ommålningsalgoritm. Med egenskapen AutoRedraw inställd på TRUE, omritar sig bläckinsamlare när formuläret ritas om. För att förenkla omritningen av formuläret spårar programmet en avgränsningsruta, medlemsvariabeln invalidateRect, för det område där färg läggs till, vilket ogiltigförklaras varje gång formuläret ritas om.
Hantera menyhändelser
Kommandot Avsluta inaktiverar InkCollector- innan programmet avslutas.
Kommandot Ink uppdaterar programläget och menystatusen, aktiverar ink-insamlaren och ogiltigförklarar formulärets tidigare målade region.
Både kommandona Träfftest och Närmaste punkt ändrar markören, uppdaterar programläget och menystatusen, inaktiverar bläckinsamlaren och ogiltigförklarar den tidigare målade regionen på formuläret.
Den klara! kommandot inaktiverar InkCollector- när inkcollector-objektets Ink-egenskap ersätts med ett nytt Ink-objekt, genererar en ink-kommandohändelse och tvingar fram en uppdatering av kontrollen.
Hantera mushändelser
Händelsehanteraren MouseMove kontrollerar programläget:
- I ink-läget gör den inget och möjliggör därmed att bläck samlas in normalt av bläckinsamlaren.
- I HitTest-läge skickar den händelseargumenten till programmets handleHitTest-metod.
- I NearestPoint-läge skickar den händelseargumenten till programmets handleNearestPoint-metod.
Utföra ett träffprov
Programmets handleHitTest-metod skapar två punkter, markörens plats och en punkts HitSize-pixlar långt från markören och konverterar sedan dessa två punkter från pixlar till koordinater för pennanteckningsutrymme.
penPt = new Point(e.X, e.Y);
Point pt2 = new Point(e.X, e.Y);
Point pt3 = new Point(e.X + HitSize/2, e.Y);
using (Graphics g = CreateGraphics())
{
ic.Renderer.PixelToInkSpace(g, ref pt1);
ic.Renderer.PixelToInkSpace(g, ref pt2);
}
Sedan använder InkCollector--objektet metoden Microsoft.Ink.Ink.HitTest() för att hitta eventuella streck inom pt3.X - pt2.X pennutrymmesenheter för markören, pt2.
Strokes strokes = ic.Ink.HitTest(pt2, (float)(pt3.X - pt2.X));
Metoden handleHitTest anger sedan pennfärgen baserat på om linjer hittades, ogiltigförklarar regionen invalidateRect, beräknar en ny region som träfftestcirkeln ritas in i och ogiltigförklarar sedan den nya regionen.
Hitta närmaste punkt
Applikationens handleNearestPoint-metod skapar två punkter som båda motsvarar markörens position. Den ena av dessa punkter, pt, konverteras till bläckyta och används i anropet till NearestPoint-metoden för InkCollector:s Ink-objekt. NearestPoint-metoden returnerar det Stroke--objekt som är närmast punkten och sätter utdataparametern för flyttalindex.
using (Graphics g = CreateGraphics())
{
// Remember pen location
Point inkPenPt = new Point(e.X, e.Y);
// Convert the pen location into a location in ink space
ic.Renderer.PixelToInkSpace(g, ref inkPenPt);
// ...
float fIndex;
Stroke stroke = ic.Ink.NearestPoint(inkPenPt, out fIndex);
Om inga linjer finns returnerar NearestPoint-metoden NULL-och markörens plats används som närmaste punkt. I annat fall beräknas platsen på den linje som motsvarar flyttalsindexet.
De närmaste punktkoordinaterna konverteras sedan till bildpunkter från pennutrymmet, metoden handleNearestPoint ogiltigförklarar sedan invalidateRect-regionen, beräknar en ny region som linjen till närmaste punkt ritas in och ogiltigförklarar även den nya regionen.
Stänga formuläret
Formulärets Dispose-metod tar bort objektet InkCollector.