Direkte Bearbeitung
Mit den APIs für direkte Bearbeitung können Sie eine großartige Benutzeroberfläche für das Schwenken, Zoomen und Ziehen von Benutzern erstellen. Dazu verarbeitet es Toucheingaben für eine Region oder ein Objekt, generiert Ausgabetransformationen und wendet die Transformationen auf Benutzeroberflächenelemente an. Sie können die direkte Bearbeitung verwenden, um die Reaktionsfähigkeit zu optimieren und die Latenz durch Off-Thread-Eingabeverarbeitung, optionale Off-Thread-Eingabetreffertests und Eingabe-/Ausgabevorhersagen zu reduzieren.
Jede Anwendung, die direkte Bearbeitung zum Verarbeiten von Berührungsinteraktionen verwendet, zeigt die fluiden Windows 8 Animationen und Interaktionsfeedbackverhalten an, die den Richtlinien für allgemeine Benutzerinteraktionen entsprechen.
Entwicklerzielgruppe
Die Direkte Bearbeitungs-API richtet sich an erfahrene Entwickler, die C/C++ kennen, ein solides Verständnis des Komponentenobjektmodells (COM) haben und mit Windows-Programmierkonzepten vertraut sind.
Laufzeitanforderungen
Die direkte Manipulation wurde in Windows 8 eingeführt. Es ist sowohl in der 32-Bit- als auch in der 64-Bit-Version enthalten.
Gründe für die Verwendung von DirectManipulation
Behandelt Interaktionen auf einfache und konsistente Weise
Die direkte Bearbeitung funktioniert, indem die Verhaltensweisen und Interaktionen für eine Region oder ein Objekt vorab deklariert werden. Beispielsweise ist eine Webseite häufig für Schwenken und Zoomen konfiguriert. Zur Laufzeit wird die Eingabe dann dieser Region/diesem Objekt über einen einfachen API-Aufruf zugeordnet. Von diesem Punkt an übernimmt die direkte Bearbeitung die gesamte Verarbeitung der Eingabe, die Anwendung von Einschränkungen und Persönlichkeit und das Generieren der Ausgabetransformationen.
Erstellen von reaktionsfähigen Touchanwendungen
Um die Reaktionsfähigkeit zu optimieren und die Latenz zu minimieren, erfolgt die Verarbeitung der direkten Bearbeitung in einem separaten, unabhängigen Thread vom UI-Thread. Daher können Ausgabetransformationen parallel zur Aktivität im UI-Thread ausgeführt werden. Die Ui-Threadaktivität kann Anwendungslogik, Rendering, Layout und alles andere umfassen, das Zyklen auf dem Prozessor verbraucht.
Flexibilität bei der Implementierung
Die in Direct Manipulation enthaltenen Schnittstellen bieten umfassende Unterstützung für Eingabeverarbeitung, Interaktionserkennung, Feedbackbenachrichtigungen und Ui-Updates. Die Schnittstellen enthalten auch Systemdienste wie DirectComposition.
Grundlegende Konzepte
Die einfachste Implementierung der direkten Bearbeitung besteht aus einem Viewport, Inhalten und Interaktionen. Der Viewport ist eine Region, die Eingaben von Benutzerinteraktionen empfangen und verarbeiten kann. Es ist auch der Bereich des Inhalts, der für den Endbenutzer sichtbar ist. Der Inhalt ist das eigentliche Objekt, das Endbenutzer sehen können, und wird als Reaktion auf eine Benutzerinteraktion verschoben oder skaliert. Die primären Benutzerinteraktionen (auch als Manipulationen bezeichnet), die von der direkten Bearbeitung unterstützt werden, sind Schwenken und Zoomen. Diese Interaktionen wenden eine Übersetzungs- oder Skalierungstransformation auf den Inhalt im Viewport an. Mehrere Viewports (jeder mit eigenem Inhalt) können in einem einzigen Fenster konfiguriert werden, um eine umfassende Benutzeroberfläche zu erstellen.
Diese Abbildung zeigt eine grundlegende Implementierung der direkten Bearbeitung vor und nach dem Schwenken.
Während der Initialisierung der direkten Bearbeitung wird ein DCompDirectManipulationCompositor-Objekt instanziiert und der direkten Bearbeitung zugeordnet. Dieses Objekt ist ein Wrapper um DirectComposition, bei dem es sich um den Systemkompositor handelt. Das -Objekt ist für das Anwenden der Ausgabetransformationen und das Steuern visueller Updates verantwortlich.
Ein Kontakt stellt einen Touchpunkt dar, der durch die in der WM/_POINTERDOWN-Nachricht angegebene Zeiger-ID identifiziert wird. Wenn eine WM_POINTERDOWN Nachricht empfangen wird, ruft die Anwendung SetContact auf. Die Anwendung benachrichtigt die direkte Bearbeitung über die Kontakte, die behandelt werden sollen, und die Viewports, die auf diese Kontakte reagieren sollen. Tastatur- und Mauseingaben verfügen über spezielle PointerId-Werte , sodass sie durch direkte Bearbeitung entsprechend verarbeitet werden können.
In unserem grundlegenden Fall, wenn SetContact genannt wird, passieren einige Dinge:
- Wenn der Benutzer einen Schwenk ausführt, wird eine WM/_POINTERCAPTURECHANGED-Nachricht an die Anwendung gesendet, um zu benachrichtigen, dass der Kontakt durch direkte Bearbeitung genutzt wurde.
- Wenn der Benutzer die Verschiebungen verschiebt, löst der Viewport Updateereignisse aus, die vom DirectComposition-Wrapper verwendet werden, um visuelle Updates auf dem Bildschirm zu steuern. Für einen Benutzer, der in einem Viewport schwenkt, scheint sich der Inhalt reibungslos unter dem Kontakt zu bewegen.
- Wenn der Benutzer den Kontakt anhebt, sieht der Benutzer, dass sich der Inhalt weiter bewegt, während er in eine Inertiäranimation überläuft und allmählich verlangsamt wird, bis er seine letzte Ruhestätte erreicht.
Verarbeiten von Tastatur- und Mauseingaben
Die direkte Bearbeitung ermöglicht die manuelle Weiterleitung von Tastatur- und Mausnachrichten aus dem Ui-Thread der Anwendung über die ProcessInput-API , sodass sie von der direkten Bearbeitung entsprechend verarbeitet werden können.
DirectManipulation und die HWND
Die direkte Bearbeitung ist einem Win32-HWND zugeordnet, um Zeigereingabenachrichten für dieses Fenster zu empfangen und zu verarbeiten. Da Direct Manipulation Ausgabewerte berechnet, werden asynchrone Rückrufe für die COM-Objekte (Direct Manipulation Component Object Model) durchgeführt, die in der Anwendung implementiert sind. Diese Rückrufe informieren die Anwendung über die Transformation, die auf die Objekte angewendet wurde. Die direkte Bearbeitung wird für den angegebenen HWND aktiviert, indem Sie Aktivieren aufrufen.