Kontext-Popup

Ein Kontext-Popup ist das Prinzipalsteuerelement in der ContextPopup-Ansicht des Windows Menübandframeworks. Es handelt sich um ein umfangreiches Kontextmenüsystem, das nur vom Framework als Erweiterung für eine Menübandimplementierung verfügbar gemacht wird. Das Framework macht das Kontext-Popup nicht als unabhängiges Steuerelement verfügbar.

Komponenten des Kontext-Popups

Das Kontext-Popup ist ein logischer Container für das Kontextmenü und Mini-Toolbar Untersteuerelemente, die über die ContextMenu- bzw. MiniToolbar-Markupelemente verfügbar gemacht werden:

Jedes Untersteuerelement kann höchstens einmal in einem Kontext-Popup angezeigt werden.

Der folgende Screenshot veranschaulicht das Kontext-Popup und die zugehörigen Untersteuerelemente.

Screenshot mit Callouts, die die kontextbezogenen Ui-Komponenten des Menübands anzeigen.

Das Kontext-Popup ist rein konzeptionell und macht keine Benutzeroberflächenfunktionalität selbst verfügbar, z. B. Positionierung oder Größenanpassung.

Hinweis

Das Kontext-Popup wird in der Regel angezeigt, indem Sie mit der rechten Maustaste (oder über die Tastenkombination UMSCHALT+F10) auf ein objekt von Interesse klicken. Die Schritte, die zum Anzeigen des Kontext-Popups erforderlich sind, werden jedoch von der Anwendung definiert.

Implementieren des Kontext-Popups

Ähnlich wie bei anderen Windows Menüband-Frameworksteuerelementen wird das Kontext-Popup über eine Markupkomponente implementiert, die die Präsentationsdetails und eine Codekomponente angibt, die ihre Funktionalität steuert.

In der folgenden Tabelle sind die Steuerelemente aufgeführt, die von den einzelnen Kontext-Popup-Untersteuerelementen unterstützt werden.

Control Mini-Toolbar Kontextmenü
Schaltfläche x x
Kontrollkästchen x x
Kombinationsfeld x
Dropdownschaltfläche x x
Dropdown-Farbwähler x x
Dropdownkatalog x x
Schriftartsteuerelement x
Hilfeschaltfläche
Katalog im Menüband
Spinner
Schaltfläche "Teilen" x x
Katalog mit geteilten Schaltflächen x x
Umschaltfläche x x

Markup

Jedes Kontext-Popup-Untersteuerelement muss einzeln im Markup deklariert werden.

Mini-Toolbar

Beim Hinzufügen von Steuerelementen zu einer Kontext-Popup-Minisymbolleiste sollten die folgenden beiden Empfehlungen berücksichtigt werden:

  • Steuerelemente sollten stark erkennbar sein und offensichtliche Funktionen bereitstellen. Vertrautheit ist entscheidend, da Bezeichnungen und QuickInfos nicht für Mini-Toolbar-Steuerelemente verfügbar gemacht werden.
  • Jeder Befehl, der von einem -Steuerelement verfügbar gemacht wird, sollte an anderer Stelle auf der Menübandbenutzeroberfläche angezeigt werden. Die Mini-Toolbar unterstützt keine Tastaturnavigation.

Im folgenden Beispiel wird das grundlegende Markup für ein MiniToolbar-Element veranschaulicht, das drei Button-Steuerelemente enthält.

Hinweis

Ein MenuGroup-Element wird für jede Zeile von Steuerelementen in der Minisymbolleiste angegeben.

<MiniToolbar Name="MiniToolbar">
  <MenuGroup>
    <Button CommandName="cmdButton1" />
    <Button CommandName="cmdButton2" />
    <Button CommandName="cmdButton3" />
  </MenuGroup>
</MiniToolbar>

Kontextmenü

Im folgenden Beispiel wird das grundlegende Markup für ein ContextMenu-Element veranschaulicht, das drei Button-Steuerelemente enthält.

Hinweis

Jede Gruppe von Steuerelementen im MenuGroup-Element wird durch eine horizontale Leiste im Kontextmenü getrennt.

<ContextMenu Name="ContextMenu">
  <MenuGroup>
    <Button CommandName="cmdCut" />
    <Button CommandName="cmdCopy" />
    <Button CommandName="cmdPaste" />
  </MenuGroup>
</ContextMenu>

Obwohl ein Kontext-Popup höchstens eines jedes Untersteuerelements enthalten kann, sind mehrere ContextMenu- und MiniToolbar-Elementdeklarationen im Menübandmarkup gültig. Dadurch kann eine Anwendung verschiedene Kombinationen von Kontextmenü- und Mini-Toolbar-Steuerelementen unterstützen, basierend auf den von der Anwendung definierten Kriterien, z. B. dem Arbeitsbereichskontext.

Weitere Informationen finden Sie im ContextMap-Element.

Im folgenden Beispiel wird das grundlegende Markup für das ContextPopup-Element veranschaulicht.

<ContextPopup>
  <ContextPopup.MiniToolbars>
    <MiniToolbar Name="MiniToolbar">
      <MenuGroup>
        <Button CommandName="cmdButton1" />
        <Button CommandName="cmdButton2" />
        <Button CommandName="cmdButton3" />
      </MenuGroup>
    </MiniToolbar>
  </ContextPopup.MiniToolbars>
  <ContextPopup.ContextMenus>
    <ContextMenu Name="ContextMenu">
      <MenuGroup>
        <Button CommandName="cmdCut" />
        <Button CommandName="cmdCopy" />
        <Button CommandName="cmdPaste" />
      </MenuGroup>
    </ContextMenu>
  </ContextPopup.ContextMenus>
  <ContextPopup.ContextMaps>
    <ContextMap CommandName="cmdContextMap" ContextMenu="ContextMenu" MiniToolbar="MiniToolbar"/>
  </ContextPopup.ContextMaps>
</ContextPopup>

Code

Um ein Kontext-Popup aufzurufen, wird die IUIContextualUI::ShowAtLocation-Methode aufgerufen, wenn das Fenster der obersten Ebene der Menübandanwendung eine WM _ CONTEXTMENU-Benachrichtigung empfängt.

In diesem Beispiel wird veranschaulicht, wie die WM _ CONTEXTMENU-Benachrichtigung in der WndProc()-Methode der Menübandanwendung behandelt wird.

case WM_CONTEXTMENU:
  POINT pt;
  POINTSTOPOINT(pt, lParam);

  // ShowContextualUI method defined by the application.
  ShowContextualUI (pt, hWnd);
  break;

Im folgenden Beispiel wird veranschaulicht, wie eine Menübandanwendung das Kontext-Popup mithilfe der IUIContextualUI::ShowAtLocation-Methode an einer bestimmten Bildschirmposition anzeigen kann.

GetCurrentContext() hat den Wert , cmdContextMap wie im vorherigen Markupbeispiel definiert.

g _ pApplication ist ein Verweis auf die IUIFramework-Schnittstelle.

HRESULT ShowContextualUI(POINT& ptLocation, HWND hWnd)
{
  GetDisplayLocation(ptLocation, hWnd);

  HRESULT hr = E_FAIL;

  IUIContextualUI* pContextualUI = NULL;
 
  if (SUCCEEDED(g_pFramework->GetView(
                                g_pApplication->GetCurrentContext(), 
                                IID_PPV_ARGS(&pContextualUI))))
  {
    hr = pContextualUI->ShowAtLocation(ptLocation.x, ptLocation.y);
    pContextualUI->Release();
  }

  return hr;
}

Der Verweis auf IUIContextualUI kann freigegeben werden, bevor das Kontext-Popup verworfen wird, wie im vorherigen Beispiel gezeigt. Der Verweis muss jedoch zu einem bestimmten Zeitpunkt freigegeben werden, um Speicherverluste zu vermeiden.

Achtung

Die Mini-Toolbar hat einen integrierten Ausblendeffekt, der auf der Nähe des Mauszeigers basiert. Aus diesem Grund wird empfohlen, die Mini-Toolbar so nah wie möglich am Mauszeiger angezeigt werden. Andernfalls wird der Mini-Toolbar aufgrund der in Konfliktstehenden Anzeigemechanismen möglicherweise nicht wie erwartet gerendert.

Kontext-Popupeigenschaften

Dem Kontext-Popup-Steuerelement sind keine Eigenschaftenschlüssel zugeordnet.

Windows Menüband-Framework-Steuerelementbibliothek

ContextPopup-Beispiel