Kontext-Popup

Ein Kontext-Popup ist das Prinzipalsteuerelement in der ContextPopup-Ansicht des Windows-Menübandframeworks. Es handelt sich um ein umfassendes Kontextmenüsystem, das vom Framework nur als Erweiterung einer 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 Markupelemente ContextMenu bzw . MiniToolbar 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 darin enthaltenen Untersteuerelemente.

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

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

Hinweis

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

 

Implementieren des Kontext-Popups

Ähnlich wie andere Windows-Menübandframeworksteuerelemente wird das Kontext-Popup über eine Markupkomponente implementiert, die die Präsentationsdetails angibt, und eine Codekomponente, die die 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-Farbauswahl x x
Dropdownkatalog x x
Schriftartsteuerelement x
Schaltfläche „Hilfe“
Katalog im Menüband
Spinner
Schaltfläche "Teilen" x x
Katalog für geteilte Schaltflächen x x
Schaltfläche umschalten 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 gut erkennbar sein und offensichtliche Funktionen bieten. Vertrautheit ist wichtig, 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

Für jede Zeile von Steuerelementen in der Minisymbolleiste wird ein MenuGroup-Element 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

Jeder Satz von Steuerelementen im MenuGroup-Element ist 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, die auf von der Anwendung definierten Kriterien basieren, 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 Ribbon-Anwendung 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 an einer bestimmten Bildschirmposition mithilfe der IUIContextualUI::ShowAtLocation-Methode anzeigen kann.

GetCurrentContext() hat den Wert von 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 geschlossen wird, wie im vorherigen Beispiel gezeigt. Der Verweis muss jedoch zu einem bestimmten Zeitpunkt freigegeben werden, um Speicherverluste zu vermeiden.

Achtung

Die Mini-Toolbar verfügt über einen integrierten Einblendeffekt, der auf der Nähe des Mauszeigers basiert. Aus diesem Grund wird empfohlen, die Mini-Toolbar so nah wie möglich am Mauszeiger anzuzeigen. Andernfalls wird der Mini-Toolbar aufgrund der in Konflikt stehenden Anzeigemechanismen möglicherweise nicht wie erwartet gerendert.

 

Kontext-Popupeigenschaften

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

Windows Ribbon Framework-Steuerelementbibliothek

ContextPopup-Beispiel