So binden Sie das Surface Dial in die eigene Applikation ein

Das Surface Dial ist ein neues Eingabegerät von Microsoft, das die Arbeit mit grafischen und auch technischen Applikationen erleichtern soll. Es verbindet die Funktion eines Drehknopfes mit der der Enter-Taste. Bereits im Herbst 2016 wurde es vorgestellt, jetzt ist es auch bei uns erhältlich.

Mit dem Surface Dial sollen Funktionen, die bisher nur an speziellen Arbeitsplätzen (z.B. Videoschnitt-Tischen) verfügbar waren, auch am normalen PC möglich sein (Mindestvoraussetzung: Windows 10 Version 1607). An einem Bildschirm mit Touch-Oberfläche ist es so möglich, nur mit Stift und dem Surface Dial zu arbeiten, ohne dass eine Tastatur benötigt wird.

Die grundlegenden Funktionen:

  • Drehen
    Winkelinformation, die für verschiedene Funktionen verwendet werden kann. Standardmäßig wird unter anderem Scrollen, Rückgängig (!) und die Lautstärkeeinstellung angeboten.
  • Drücken
    Entspricht der Enter-Taste.
  • Drücken und drehen
    Ruft ein spezielles Menü auf, das die jeweils aktuelle Funktion des Surface Dial anbietet.
  • Aufsetzen auf den Bildschirm
    (derzeit nur in Verbindung mit Surface Studio)
    Die damit verbundenen Aktionen sind von der Aufsetzstelle abhängig.

Doch was interessiert den Entwickler am meisten? Natürlich: Wie wird das Gerät in die eigene Applikation eingebunden? Hier eine kurze Anleitung dazu:

Im ersten Schritt verbindet sich die Applikation mit dem Controller und registriert Event-Handler für das Druck-Event und für die Rotation:

if (!RadialController.IsSupported())
{
    return;
}

this.dialController = RadialController.CreateForCurrentView();

this.dialController.ButtonClicked +=
    this.DialControllerButtonClicked;
this.dialController.RotationChanged +=
    this.DialControllerRotationChanged;

Bietet die Applikation eine eigene Funktion an, erweitert man damit das Dial-Menü. Die Icons auf dem Menüpunkt können aus einem Font-Symbol oder einem Bild (hier nicht gezeigt) erzeugt werden:

var newItem = RadialControllerMenuItem.CreateFromFontGlyph(
    "Rotate", "\xE7AD", "Segoe MDL2 Assets");
newItem.Invoked += this.OnRotateMenuItem;this.dialController.Menu.Items.Add(newItem);

Nun fehlt nur noch die Event-Handler (und die restliche Applikation):

private void DialControllerRotationChanged( 
    RadialController sender, 
    RadialControllerRotationChangedEventArgs args)
{
    var tempAngle = this.Angle + args.RotationDeltaInDegrees;
    this.Angle = tempAngle % 360;
}
 
private void DialControllerButtonClicked(  
    RadialController sender, 
    RadialControllerButtonClickedEventArgs args)
{
    this.Angle = 0.0;
}

Das oben gezeigte Beispiel gehört zu einer UWP-Applikation (Universal Windows Platform). Um das Surface Dial in eine Applikation für den klassischen Desktop einzubinden, sind ein paar kleine zusätzliche Schritte nötig.

Da Microsoft für das Surface Dial native Unterstützung nur für UWP anbietet, ist eine Installation des Pakets für die Interoperabilität zwischen UWP und Classic Desktop unerlässlich. Dazu fügt man das NuGet-Paket „UwpDesktop“ sowie die Interfaces für den Zugriff auf die Funktionen dem Projekt hinzu. Um die Verbindung zum Surface Dial herzustellen, sammelt man ein paar Informationen des Fensters, die sehr an native Win32-Programmierung erinnern. Ist die Verbindung erst einmal etabliert, geht es dann auf einfache Art weiter, wie auch in der UWP-Applikation.

   

Der komplette Code ist im diesem Beispiel zu sehen.

Weiterführende Informationen

MicroConsult Fachwissen zum Thema Softwareentwicklung

MicroConsult Training & Coaching zum Thema Softwareentwicklung

 

Beitragsbild: Microsoft

Veröffentlicht von

Frank Listing

Frank Listing

Seit 2002 bin ich Trainer und Projektcoach bei MicroConsult; meine Schwerpunkte sind Microsoft-Plattformen, Software-Architekturen, objektorientierte Programmierung und Testen von Embedded-Systemen. Außerdem bin ich Spezialist für die Themen C++, C#, Finite State Machines, Clean Code und .NET. Mein Wissen gebe ich regelmäßig in Publikationen und Fachvorträgen z.B. auf dem Embedded Software Engineering (ESE) Kongress weiter.