Schnellzugriffstasten

Kommen wir nun zur vorletzten Lektion in diesem Kapitel und sehen uns die Ressource Schnellzugriffstasten an.

Die Schnellzugriffstaste, auch Accelerator-Key genannt, dient hauptsächlich zur schnellen Auswahl von Menübefehlen. So ist dient z.B. die Schnellzugriffstaste <ALT>+<F4> zum Schließen eines Fensters. Außer diesen von System vordefinierten Tasten können Sie jedoch auch eigene Zugriffstasten in Ihrer Anwendung definieren.

Erstellen Sie sich ein neues SDI-Projekt mit dem Namen Accel. Nach dem der Anwendungs-Assistent das Projekt fertig erstellt hat, gehen Sie wieder in die Ressource-Ansicht und wählen aus der Baumansicht den Ressource-Typ Accelerator aus. Öffnen Sie dann die Accelerator-Tabelle IDR_MAINFRAME durch einen Doppelklick auf die ID. Sie erhalten dann eine Übersicht über alle vom Anwendungs-Assistenten bereits zu Ihrer Anwendung hinzugefügten Zugriffstasten.

Die Standard-Schnellzugriffstasten

Wie Sie dem oben darstellten Bild entnehmen können, besitzt jede Schnellzugriffstaste zunächst eine ID. Über diese ID können Sie dann der Schnellzugriffstaste entweder eine eigene Methode zuordnen oder aber auch einer Methode die schon mit einem Menüpunkt verbunden ist. Im letzteren Fall es dann gleichgültig, ob Sie den Menüpunkt auswählen oder aber die Schnellzugriffstaste drücken. Die Zuweisung einer Methode zu einer ID erfolgt genauso wie vorhin bei den Menüs beschrieben. Die mittlere Spalte spezifiziert die Taste oder Tastenkombination für die Schnellzugriffstaste und die letzte Spalte zeigt noch an, um welchen Tastentyp (virtuelle Taste oder ASCII-Taste) es sich hierbei handelt. Im Bild oben bewirkt z.B. die Tastenkombination <CTRL>+<C> das gleiche wie im Menü Bearbeiten der Menüeintrag Kopieren. In beiden Fällen erhält die Anwendung eine Nachricht mit der ID ID_EDIT_COPY, was letztendlich zum Kopieren eines markierten Bereichs in die Zwischenablage führen sollte.

Bauen wir jetzt unsere ersten Zugriffstasten in das erstellte Projekt ein. Damit Sie nachher auch sehen, dass die Zugriffstaste genauso wie die Auswahl eines Menüeintrags wirkt, fügen Sie der Anwendung zunächst folgendes Popup-Menü hinzu, so wie in der letzten Lektion beschrieben:

Beispielmenü für die Schnellzugriffstasten

Anschließend erstellen Sie mit dem Klassen-Assistenten die entsprechenden Methoden OnCmd1(...), OnCmd2(...) und OnCmd3(...) in der Ansichtsklasse CAccelView. Achten Sie darauf, dass im Klassen-Assistenten auch der richtige Klassenname eingestellt ist.  Fügen Sie in diese Methoden den folgenden Code ein:

void CAccelView::OnCmd1()
{
    // TODO: Code für Befehlsbehandlungsroutine hier einfügen
    TRACE("Befehl 1 ausgeführt!\n");
}
void CAccelView::OnCmd2()
{
    // TODO: Code für Befehlsbehandlungsroutine hier einfügen
    TRACE("Befehl 2 ausgeführt!\n");
}
void CAccelView::OnCmd3()
{
    // TODO: Code für Befehlsbehandlungsroutine hier einfügen
    TRACE("Befehl 3 ausgeführt!\n");
}

Übersetzen und starten Sie das Programm. Je nach ausgewähltem Menüpunkt wird der entsprechende Text im Debuggerfenster ausgegeben.

Nun erweitern wir das Programm um eigene Schnellzugriffstasten. Öffnen Sie jetzt wieder die Ressource-Ansicht und dort die Ressource Accelerator. Um eine neue Schnellzugriffstaste hinzuzufügen, klicken Sie entweder den letzten, freien Eintrag an oder drücken im Editorfenster die rechte Maustasten und wählen aus dem Kontext-Menü den Eintrag Neue Zugriffstaste aus. Danach wird folgender Dialog eingeblendet:

Definition einer Schnellzugriffstaste

Im Feld ID geben Sie die ID der Schnellzugriffstaste ein. Im Bild oben erhält die zu definierende Schnellzugriffstaste die gleiche ID ID_CMD1 wie der Menüpunkt 1. Befehl im vorhin erstellten Popup-Menü. Anschließend müssen Sie noch die Taste bzw. Tastenkombination für die Schnellzugriffstaste definieren. Klicken Sie dazu einfach den Button Nächste Taste an und drücken Sie danach die Tastenkombination, die der Schnellzugriffstaste zugewiesen werden soll. Im Beispiel oben ist dies die Kombination <CTRL>+<1>. Schließen Sie den Dialog und die neue Schnellzugriffstaste wird übernommen. Erzeugen Sie auf die gleiche Art und Weise die Schnellzugriffstasten für die IDs ID_CMD2 und ID_CMD3.

Zusätzlich wollen wir aber auch noch einen 'versteckten' Befehl einbauen. Versuchen Sie nun einmal selbst, eine Schnellzugriffstaste mit der bisher noch nicht definierten ID ID_HCMD zu erstellen. Weisen Sie ihr die Tastenkombination <CTRL>+<H> zu. Selbstverständlich müssen Sie nun für diese ID noch eine dazugehörige Methode mittels des Klassen-Assistenten erstellen. Geben Sie in dieser Methode einen kurzen Text im Debuggerfenster aus.

Lösung zur Definition einer Schnellzugriffstaste

Als erstes müssen Sie wie oben beschrieben die Schnellzugriffstaste definieren. Die ID und die Tastenkombination für die Schnellzugriffstaste entnehme Sie bitte der obigen Übungsbeschreibung. Nach dem Sie die Taste definiert haben, rufen Sie den Klassen-Assistenten auf um der Schnellzugriffstaste eine Methode zuzuweisen. Sie sollten dabei den vom Klassen-Assistenten vorgeschlagenen Namen OnHcmd(...) übernehmen. Beachten Sie dabei aber unbedingt, dass auch im Klassen-Assistenten der richtige Klassenname eingestellt ist. Ansonsten landet Ihre neue Methode mit großer Wahrscheinlichkeit im Rahmenfenster der Anwendung.

Passen Sie dann den Code der Methode OnHcmd(...) z.B. wie folgt an:

void CAccelView::OnHcmd()
{
    // TODO: Code für Befehlsbehandlungsroutine hier einfügen
    TRACE("Herzlichen Glückwunsch! Sie haben den versteckten Befehl gefunden!\n");
}

Eigentlich eine recht triviale Übung, oder?

Ende der Lösung

Übersetzen und starten Sie das Programm jetzt. Jedes Mal wenn Sie eine der Zugriffstasten <CTRL>+<1>, <CTRL>+<2>, <CTRL>+<3> oder <CTRL>+<H> drücken, erscheint die entsprechende Ausgabe im Debuggerfenster.

Das fertige Beispiel zu dieser Lektion finden Sie unter 07Ressourcen\Accel.

Und das war's vorläufig auch schon zum Thema Schnellzugriffstasten. Weiter geht's in der nächsten Lektion mit der letzten Ressource in diesem Kapitel, der Version-Information.



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470