307
Kapitel 12
Mit dem Windows-Menüband
entwickeln, Teil 2
In diesem Kapitel:
Das Menüband programmieren 308
Zusammenfassung 351
308
Kapitel 12: Mit dem Windows-Menüband entwickeln, Teil 2
Inzwischen sind Sie in der Lage, eine Menüband-Markupdatei zu erstellen. Was Sie noch nicht wissen ist,
wie Sie sie aus dem Code heraus laden und damit kommunizieren. Im Unterschied zum herkömmlichen
Win32-Benutzeroberflächensystem, das auf der Microsoft Windows-Nachrichtenschnittstelle basiert,
definiert das Menübandframework eine eigene Methode zur Interaktion mit COM (Component Object
Model) als Schnittstellenmechanismus. Die Interaktion zwischen dem Menübandframework und Ihrem
Anwendungscode ist ein Pingpong-Spiel.
Es ist Ihre Aufgabe, eine Instanz des Menübandframeworks zu erstellen und zu veranlassen, dass sie die
Ressource lädt und das Menüband initialisiert. Auf der anderen Seite ist das Menübandframework dafür
zuständig, das Menüband zu laden und zu erstellen. Wird ein Befehl verwendet, fragt das Framework bei
Ihrem Code nach einem bekannten COM-Objekt, das für die Behandlung des Befehlsereignisses zuständig
ist. Sie können auf Ereignisse reagieren, das Menüband oder einen Teil davon ungültig machen oder die
Menübandframework-Schnittstelle aufrufen, um bestimmte Einstellungen und Eigenschaften des Menü-
bands zu ändern. Viele der Features, die Sie im vorherigen Kapitel kennen gelernt haben, werden mithilfe
von Code zum Leben erweckt – angefangen beim CheckBox-Steuerelement, das initialisiert und entspre-
chend dem Anwendungsstatus geändert werden muss, bis zu einem Katalog, der zu füllen ist. In Ihrem
Code haben Sie die Aufgabe, Menübandereignisse zu behandeln und den Menübandstatus zu ändern. In
diesem Kapitel erfahren Sie, wie Sie eine Instanz des Menübands erstellen, das Menüband und Ihren Code
binden, damit beide zusammenarbeiten, und wie Sie Menübandereignisse behandeln.
Das Menüband programmieren
Da das Mebandframework auf dem Component Object Model (COM) basiert,ssen Sie zuerst Ihr Tool
für die Verwendung von COM auswählen. Im Zusammenhang mit dem Menüband genügt es nicht zu
wissen, wie COM-Objekte konsumiert werden. Es ist auch erforderlich, Ihre eigenen COM-Objekte zu
implementieren, damit das Framework Ihren Code aufrufen kann. Es steht Ihnen frei, den gesamten COM-
Code mit reinem alten C++ zu implementieren, oder auf ein Framework wie die Active Template Library
(ATL) zurückzugreifen, die Ihnen den gesamten Verbindungscode frei Haus liefert. Im Buchbeispiel ver-
wenden wir ATL. Allerdings sind viele Beispiele des SDK ausschließlich in C++ verfasst.
Wenn Sie sich für ATL entscheiden,nnen Sie mit dem Anwendungsassistenten von Microsoft Visual
Studio ein ATL-Projekt beginnen oder ein Win32-Projekt erstellen und die ATL-Unterstützung mithilfe der
Headerdateien atlbase.h, atlcom.h und initguid.h einbinden. Außerdem brauchen Sie ein globales ATL-
Objekt. Am einfachsten lässt sich das bewerkstelligen, wenn Sie die CComModule-Objektinstanz in einer
Ihrer .cpp-Dateien deklarieren. Da jedoch dieser Typ seit ATL 7.0 als veraltet gilt, sollten Sie ihn durch eine
neuere Version ersetzen, indem Sie beispielsweise von CAtlDllModuleT ableiten und eine globale Variable
dieses Typs deklarieren.
Es gibt viele COM-Schnittstellen, die mit der Programmierung des Windows-Menübandframeworks zu tun
haben, doch sind drei davon besonders wichtig und Teil jeder Menüband-basierten UI-Anwendung: IU-
IFramework, IUIApplication und IUICommandHandler. Diese Schnittstellen verkörpern die Hauptinterakti-
onspunkte zwischen Menübandframework und dem dahinter stehenden Code. Wir führen zunächst diese
Schnittstellen ein und zeigen, wie Sie damit das Menübandframework initialisieren. Später erfahren Sie, wie
Sie Ereignisse behandeln und die verschiedenen Eigenschaften und den Zustand des Menübands ändern.
Das Menüband programmieren
309
Noch einmal: Das Minimalmenüband
Haben Sie noch die Menüband-Minimalanwendung aus dem vorherigen Kapitel vor Augen? Wir erstellen
zunächst Code, der das Framework initialisiert und das minimale Menüband lädt, das in die Ressourcen-
Markupdatei kompiliert wird. Unser Ausgangspunkt ist die neue Win32-Projektvorlage von Visual Studio,
die die grundlegende Windows-Anwendung erstellt.
Abbildung 12.1 Neues Win32-Projekt in Visual Studio anlegen
Im Assistenten können Sie unter Allgemeine Headerdateien hinzufügen für das Kontrollkästchen ATL aktivie-
ren, um die ATL-Bibliothekenunterstützung zum Teil des Projekts zu machen. Daraufhin wird eine Zeile
#include "atlbase.h"
in die Headerdatei stdafx.h eingefügt. Wenn Sie dieses Kontrollkästchen nicht aktivieren, müssen Sie diese
Include-Zeile manuell in Ihren Code einfügen. Klicken Sie im Assistenten auf Fertig stellen, kompilieren Sie
den Code und führen Sie ihn dann aus. Das Ergebnis ist eine Anwendung, die ein leeres Fenster zeigt. Als
ersten Schritt statten Sie die Anwendung mit einem Menüband aus.
Fügen Sie in die Headerdatei MinimalRibbon.h den folgenden Code ein:
// MinimalRibbon.h
#pragma once
#include "resource.h"
#include <UIRibbon.h>
bool InitializeFramework(HWND hWnd);
void DestroyFramework();
extern IUIFramework *g_pFramework; // Verweis auf das Menübandframework
extern IUIApplication *g_pApplication; // Verweis auf das Anwendungsobjekt

Get Windows 7 für Entwickler - Crashkurs now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.