Neukonfiguration des Menübands mit Anwendungsmodi

Das Windows-Menübandframework unterstützt das dynamische Neukonfigurieren und Verfügbarmachen von Kernelementen der Menübandbenutzeroberfläche zur Laufzeit basierend auf dem Zustand der Anwendung (auch als Kontext bezeichnet). Die verschiedenen von einer Anwendung unterstützten Zustände werden als Anwendungsmodi bezeichnet und bestimmten Elementen im Markup zugeordnet.

Einführung

Anwendungsmodi bestehen aus logischen Gruppen von Steuerelementen, die einige Kernfunktionen der Anwendung auf der Menüband-Benutzeroberfläche verfügbar machen. Diese Modi werden von der Anwendung durch einen Aufruf der Frameworkmethode IUIFramework::SetModes dynamisch aktiviert oder deaktiviert, wodurch die Sichtbarkeit eines oder mehrerer Anwendungsmodi aktiviert oder deaktiviert wird.

Kontextbezogene Benutzeroberfläche

Das Menübandframework bietet eine umfassende Benutzererfahrung durch die Integration dynamischer Steuerelemente, die nahtlos auf Benutzerinteraktionen und Anwendungskontext reagieren. Diese umfassende kontextbezogene Benutzeroberfläche wird durch eine Kombination der folgenden Mechanismen bereitgestellt:

  • Kataloge: sammlungsbasierte Steuerelemente, die die dynamische Bearbeitung ihrer Elementsammlungen unterstützen.
  • Kontextbezogene Registerkarten: Menübandregisterkarten, deren Sichtbarkeit durch eine Änderung im Arbeitsbereichskontext bestimmt wird, z. B. die Auswahl eines Bilds in einem Dokument.
  • Anwendungsmodi: Kernfunktionen der Anwendung, die vom Anwendungskontext abhängig sind.

In mancher Hinsicht erscheinen Anwendungsmodi funktionell ähnlich wie kontextbezogene Registerkarten. Der grundlegende Unterschied liegt jedoch in der Absicht und dem Umfang der einzelnen.

Kontextbezogene Steuerelemente werden als Reaktion auf eine Änderung des Kontexts innerhalb einer Anwendung aktiviert. In Microsoft Paint für Windows 7 wird beispielsweise eine kontextbezogene Registerkarte angezeigt, die Gruppen von textbezogenen Befehlen enthält, wenn ein Benutzer einen Textbereich in den Arbeitsbereich einfügt. Diese kontextbezogene Registerkarte enthält keine Kernbefehle für die Anwendung und wird nur auf der Benutzeroberfläche verfügbar gemacht, da sich der Kontext innerhalb der Anwendung geändert hat. Die Kernfunktionalität der Anwendung (die Bildbearbeitungsbefehle) ist weiterhin relevant und für den Benutzer verfügbar, auch wenn die kontextbezogene Registerkarte sichtbar ist.

Anwendungsmodi unterscheiden sich von kontextbezogenen Steuerelementen darin, dass sie die Funktionalität als Reaktion auf Änderungen im Kontext neu konfigurieren, in dem die Anwendung ausgeführt wird. Anwendungsmodi befinden sich auf einer höheren Abstraktionsebene. Sie bieten eine Möglichkeit, die Kernfunktionalität einer Anwendung neu zu konfigurieren, anstatt vorübergehend Funktionen verfügbar zu machen, die keine Kernkomponente der Benutzeroberfläche sind. In Microsoft Paint für Windows 7 tritt beispielsweise ein Wechsel im Anwendungsmodus auf, wenn der Befehl Druckvorschau aufgerufen wird. Wenn Microsoft Paint zur Seitenansicht wechselt, ändert sich der Kontext, in dem die Anwendung arbeitet, von der Bearbeitung zur Vorschau. Dadurch ändert sich die Kernfunktionalität der Anwendung, bis die Druckvorschau abgebrochen wird und die Anwendung erneut in den Bearbeitungskontext wechselt.

Einfaches Anwendungsmodusszenario

Im folgenden Szenario wird veranschaulicht, wie Anwendungsmodi in einer Anwendung namens RibbonApp verwendet werden, um diskrete Aspekte der Kernfunktionalität verfügbar zu machen.

In RibbonApp sind zwei Anwendungsmodi definiert:

  • Im einfachen Modus werden grundlegende Befehle auf der Gesamten Menüband-Benutzeroberfläche verfügbar gemacht. Diese Befehle werden jederzeit angezeigt, unabhängig davon, welcher Anwendungsmodus aktiv ist.
  • Im erweiterten Modus werden komplexe Befehle verfügbar gemacht, die für erfahrene Benutzer der Anwendung bestimmt sind. Diese erweiterten Befehle werden zusätzlich zu den einfachen Befehlen auf der Menüband-Benutzeroberfläche angezeigt.

Standardmäßig ist RibbonApp so festgelegt, dass es im einfachen Modus geöffnet wird, und die befehle, die von anfängern Benutzern benötigt werden, werden im Anwendungsmenü und auf der Registerkarte Start angezeigt. Die folgenden Screenshots zeigen das Menü " RibbonApp-Anwendung" und die Registerkarte " Start " im einfachen Modus, wobei die modalen Steuerelemente hervorgehoben sind.

Screenshot mit einer Registerkarte für den einfachen Anwendungsmodus. Screenshot des Anwendungsmenüs für den einfachen Anwendungsmodus.

Obwohl diese Befehle für Anfänger ausreichend sind, unterstützt die RibbonApp auch erfahrene Benutzer durch einen erweiterten Modus, der, wenn er durch Klicken auf die Schaltfläche Zum erweiterten Modus wechseln im Anwendungsmenü aktiviert wird, zusätzliche Kernfunktionen anzeigt.

Dieses Szenario lässt sich leicht implementieren, indem verschiedene Elemente im Markup an diskrete Anwendungsmodi gebunden werden, die bei Bedarf aktiviert und deaktiviert werden können. Die folgenden Screenshots zeigen das Menü " RibbonApp-Anwendung" und die Registerkarte " Start " im erweiterten Modus, wobei die modalen Steuerelemente hervorgehoben sind.

Screenshot: Registerkarte für den erweiterten Anwendungsmodus Screenshot des Anwendungsmenüs für den erweiterten Anwendungsmodus.

Implementieren von Anwendungsmodi

In diesem Abschnitt werden die drei Schritte beschrieben, die normalerweise für die Implementierung von Menübandframeworkanwendungsmodi erforderlich sind. RibbonApp wird verwendet, um ein Beispiel für jeden Schritt bereitzustellen.

Identifizieren der Modi

Jeder Modus in einer Anwendung sollte einen logischen Satz von Funktionen darstellen, der vom Kontext abhängt, in dem eine Anwendung arbeiten kann. Wenn eine Anwendung beispielsweise Steuerelemente anzeigt, die nur relevant sind, wenn eine Netzwerkverbindung erkannt wird, werden diese Steuerelemente in einem Netzwerkkontext ausgeführt, der die Erstellung eines Netzwerkmodus rechtfertigen kann.

RibbonApp verfügt über zwei Kontexte, die jederzeit aktiv sein können: Einfach und Erweitert. Daher erfordert RibbonApp zwei Modi: Einfach und Erweitert.

Zuweisen von Steuerelementen zu Anwendungsmodi

Nachdem die Anwendungsmodi identifiziert wurden, weisen Sie jedes Menüband-Steuerelement einem Modus zu, indem Sie ein ApplicationModes-Attribut im Markup für die Steuerelementelemente deklarieren, die Anwendungsmodi unterstützen.

In der Menübandansicht können Modi für die folgenden Steuerelementelemente angegeben werden:

Im Menübandframework werden diese Steuerelementelemente als modale Steuerelemente bezeichnet. Sie werden nur angezeigt, wenn ein Modus, an den sie gebunden sind, auf der Benutzeroberfläche aktiv ist.

Steuerelementelemente, die in einem modalen Steuerelement enthalten sind, erben das Anwendungsmodusverhalten. Wenn z. B. ein modales Gruppensteuerelement einem erweiterten Modus zugewiesen ist und der erweiterte Modus nicht aktiv ist, werden diese Gruppe und alle darin enthaltenen Steuerelemente( modal oder anderweitig) auf der Menüband-Benutzeroberfläche nicht angezeigt.

Mit dem ApplicationModes-Attribut werden modalen Steuerelementen modi in einer 1:n-Beziehung (1:n) zugewiesen, bei der ein einzelnes modales Steuerelement mehreren Modi zugeordnet werden kann.

Das Menübandframework bezieht sich numerisch auf Modi von 0 bis 31, wobei Modus 0 als Standardmodus betrachtet wird, der automatisch aktiviert wird, wenn eine Menübandanwendung gestartet wird. Jedes modale Steuerelement, das kein ApplicationModes-Attribut angibt, wird als Mitglied des Standardmodus betrachtet.

In RibbonApp ist Simple der Standardmodus, wobei die Funktionalität erweiterter Modus nur angezeigt wird, wenn sie vom Benutzer initiiert wird.

Im folgenden Beispiel wird das für RibbonApp erforderliche Markup veranschaulicht.

<Application.Views>
  <Ribbon>

    <!--Application Menu-->
    <Ribbon.ApplicationMenu>
      <ApplicationMenu CommandName='cmdAppMenu'>                    
        <MenuGroup>
          <Button CommandName='cmdSave'/>                        
          <Button CommandName='cmdExportMetadata' ApplicationModes='1'/>                   
        </MenuGroup>              
        <MenuGroup>
          <Button CommandName='cmdSwitchModes' ApplicationModes ='0,1'/>
          <Button CommandName='cmdExit'/>
        </MenuGroup>
      </ApplicationMenu>
    </Ribbon.ApplicationMenu>
            
    <!--Tabs-->
    <Ribbon.Tabs>
      <!--Home Tab-->
      <Tab CommandName='cmdHomeTab'>
                    
        <!--Scaling Policy for Home tab-->
        <Tab.ScalingPolicy>
          <ScalingPolicy>
            <ScalingPolicy.IdealSizes>
              <Scale Group='cmdSimpleControlsGroup' Size='Medium'/>                                
            </ScalingPolicy.IdealSizes>                     
          </ScalingPolicy>
        </Tab.ScalingPolicy>     
                    
        <!--Simple Controls Group-->
        <Group CommandName='cmdSimpleControlsGroup' SizeDefinition='ThreeButtons-OneBigAndTwoSmall'>                        
          <Button CommandName="cmdPaste" />
          <Button CommandName='cmdCut'/>                        
          <Button CommandName='cmdCopy'/>                        
        </Group>
      </Tab>
                
      <!--Advanced Tab-->
      <Tab CommandName='cmdAdvancedTab' ApplicationModes='1'>
        <!--Advanced Controls Group-->
        <Group CommandName='cmdMetadataGroup' ApplicationModes='1' SizeDefinition='TwoButtons'>
          <Button CommandName='cmdEditMetadata' />
          <Button CommandName='cmdCheckErrors' />
        </Group>
      </Tab>
    </Ribbon.Tabs>                   
                             
  </Ribbon>         
</Application.Views>

In diesem Beispiel wird Folgendes veranschaulicht:

  • Der Standardmodus 0 muss nicht explizit deklariert werden. Da modale Steuerelemente, die das ApplicationModes-Attribut nicht angeben, automatisch an den Modus 0 (einfacher Modus im RibbonApp-Beispiel) gebunden werden, ist es nicht erforderlich, das Attribut für modale Standardsteuerelemente explizit zu deklarieren.
  • Steuerelemente können an mehrere Modi gebunden werden. Für RibbonApp ist das ApplicationModes-Attribut in einem Einfachen Modus-Steuerelement nur die cmdSwitchModes Schaltfläche erforderlich, da sie teil des einfachen und erweiterten Modus ist. Wenn ein Modus aktiv ist, wird dieses Steuerelement im Anwendungsmenü angezeigt.
  • Modale Steuerelemente erben nicht von ihren übergeordneten Steuerelementen. Die Registerkarte Erweitert von RibbonApp enthält eine Metadatengruppe . Beide modalen Steuerelemente sind Modus 1 (Erweiterter Modus) zugewiesen. Durch das Zuweisen der Registerkarte Erweitert zum Modus 1 werden untergeordnete Steuerelemente, z. B . die Metadatengruppe , nicht automatisch dem Modus 1 zugewiesen. Dadurch kann jede Gruppe innerhalb einer Registerkarte zur Laufzeit unabhängig aktiviert oder deaktiviert werden.
  • Nicht modale Steuerelemente können sich weiterhin auf Modusschalter verlassen. Die Schaltflächen Metadaten bearbeiten und Nach Fehlern suchen von RibbonApp sind für fortgeschrittene Benutzer und nur verfügbar, wenn der Benutzer in den erweiterten Modus wechselt. Schaltflächensteuerelemente, die nicht im Anwendungsmenü gehostet werden, sind nicht modal. Da diese Schaltflächen jedoch in einem modalen Steuerelement (der Metadatengruppe ) gehostet werden, sind sie sichtbar, wenn die Gruppe sichtbar ist. Daher werden diese Schaltflächen angezeigt, wenn der erweiterte Modus aktiviert ist und die Metadatengruppe auf der Menüband-Benutzeroberfläche verfügbar gemacht wird.

Umschalten der Modi zur Laufzeit

Nachdem Modi im Markup definiert wurden, können sie als Reaktion auf kontextbezogene Ereignisse problemlos aktiviert oder deaktiviert werden. Wie bereits erwähnt, starten Menübandanwendungen immer im Standardmodus 0. Nachdem die Anwendung initialisiert wurde und modus 0 aktiv ist, kann der Satz der aktiven Modi durch Aufrufen der IUIFramework::SetModes-Funktion geändert werden. Diese Funktion verwendet eine 32-Bit-Ganzzahl als bitweise Darstellung der Modi, die aktiv sein sollen. das am wenigsten signifikante Bit stellt den Modus 0 und das bedeutendste Bit den Modus 31 dar. Wenn ein Bit auf 0 festgelegt ist, ist der Modus auf der Menüband-Benutzeroberfläche nicht aktiv.

Wenn ein Benutzer in RibbonApp den erweiterten Modus aktiviert, werden die erweiterten Befehle zusammen mit den einfachen Befehlen angezeigt. Der Befehlshandler für die Schaltfläche Zum erweiterten Modus wechseln ruft IUIFramework::SetModes auf, um die Modi 0 (Einfach) und 1 (Erweitert) auf der Benutzeroberfläche als aktiv festzulegen. Das folgende Beispiel ist der RibbonApp-Code für diesen Funktionsaufruf:

const int SIMPLE_MODE = 0;
const int ADVANCED_MODE = 1;
pFramework->SetModes( UI_MAKEAPPMODE(SIMPLE_MODE) | UI_MAKEAPPMODE(ADVANCED_MODE) );

Hinweis

Das Menübandframework UI_MAKEAPPMODE Makros vereinfacht die Aufgabe, diese Bits in Vorbereitung auf den Aufruf von IUIFramework::SetModes richtig festzulegen.

 

In diesem Beispiel wird Folgendes veranschaulicht:

  • Verwenden Sie das makro UI_MAKEAPPMODE, um einen Modussatz zu erstellen.
  • Modi werden explizit und atomar festgelegt. Der ganzzahlige Wert, der an IUIFramework::SetModes übergeben wird, stellt die Modi dar, die nach der Rückgabe der Funktion aktiv sind. Obwohl der einfache Modus zuvor aktiv war, muss IUIFramework::SetModes angeben, dass der einfache Modus aktiv bleibt, wenn der erweiterte Modus aktiviert ist.
  • Der Standardmodus kann entfernt werden. Obwohl in RibbonApp der Standardmodus (Modus 0) nie entfernt wird, kann er mit dem folgenden Aufruf entfernt werden: g_pFramework->SetModes(UI_MAKEAPPMODE(ADVANCED_MODE)), wobei nur die erweiterten Befehle auf der Benutzeroberfläche verfügbar sind.

Hinweis

Wenn die Modi einer Anwendung neu konfiguriert werden, versucht das Menüband, die zuvor ausgewählte Registerkarte auf der Benutzeroberfläche beizubehalten. Wenn der neue Satz von Modi nicht mehr die Registerkarte enthält, die vor dem Aufruf ausgewählt wurde, wählt das Menüband die Registerkarte in seinem Layout aus, die dem Anwendungsmenü am nächsten ist. Diese Registerkarte soll die Befehle enthalten, die für den Benutzer am relevantesten sind. Weitere Informationen finden Sie unter Richtlinien zur Benutzeroberfläche des Menübands.

 

Bemerkungen

Das Menüband muss jederzeit über mindestens einen aktiven Modus verfügen. Wenn eine Anwendung versucht, alle Modi durch Aufrufen von IUIFramework::SetModes mit dem Moduswert 0 zu deaktivieren, wird E_FAIL zurückgegeben, und der aktive Modussatz bleibt unverändert.

Das Framework erfordert, dass auf der Menübandbenutzeroberfläche jederzeit mindestens eine Registerkarte vorhanden ist. Daher muss mindestens eine Registerkarte vom Standardmodus (Modus 0) und nach jedem Moduswechsel verfügbar sein.

Nicht alle Bereiche der Menüband-Benutzeroberfläche sind von Anwendungsmodi betroffen. Wenn das Deaktivieren eines Modus beispielsweise dazu führt, dass Schaltflächen aus dem Menüband verschwinden, die zuvor der Symbolleiste für den Schnellzugriff hinzugefügt wurden, verbleiben diese Schaltflächen in der Symbolleiste für den Schnellzugriff, sodass Benutzer die an die Schaltflächen gebundenen Befehle ausführen können. Wenn ein Befehl zu einem oder mehreren inaktiven Modi gehört, sollte dieser Befehl in der Regel ebenfalls deaktiviert werden, indem die eigenschaft UI_PKEY_Enabled auf 0 (VARIANT_FALSE) festgelegt wird.

Richtlinien für die Benutzeroberfläche des Menübands

Anzeigen kontextbezogener Registerkarten