Megosztás a következőn keresztül:


Gyorsítótáblák

Az alkalmazások gyakran definiálnak billentyűparancsokat, például a CTRL+O billentyűkombinációt a Fájlmegnyitás parancshoz. Az egyes WM_KEYDOWN üzenetek kezelésével billentyűparancsokat is implementálhat, de a gyorsítótáblák jobb megoldást nyújtanak a következőre:

  • Kevesebb kódolást igényel.
  • Összesíti az összes parancsikont egy adatfájlba.
  • Támogatja a más nyelvekre való honosítást.
  • Lehetővé teszi, hogy a parancsikonok és a menüparancsok ugyanazt az alkalmazáslogikát használják.

A gyorsítótáblák olyan adaterőforrás, amely a billentyűzet kombinációit, például a CTRL+O billentyűkombinációkat az alkalmazásparancsokhoz rendeli. Mielőtt megismernénk a gyorsítótáblák használatát, gyorsan be kell vezetnünk az erőforrásokat. Az erőforrás- egy alkalmazás bináris fájljába (EXE vagy DLL) beépített adatblob. Az erőforrások az alkalmazás által igényelt adatokat tárolják, például menüket, kurzorokat, ikonokat, képeket, szöveges sztringeket vagy bármilyen egyéni alkalmazásadatokat. Az alkalmazás futtatáskor tölti be az erőforrásadatokat a binárisból. Ha az erőforrásokat bináris fájlba szeretné foglalni, tegye a következőket:

  1. Hozzon létre egy erőforrásdefiníciós (.rc) fájlt. Ez a fájl határozza meg az erőforrások típusait és azonosítóit. Az erőforrásdefiníciós fájl tartalmazhat más fájlokra mutató hivatkozásokat. Az ikonerőforrás például deklarálva van az .rc fájlban, de az ikonképet külön fájlban tárolja a rendszer.
  2. A Microsoft Windows Resource Compiler (RC) használatával lefordíthatja az erőforrásdefiníciós fájlt egy lefordított erőforrásfájlba (.res). Az RC fordító a Visual Studióval és a Windows SDK-val is elérhető.
  3. Kapcsolja össze a lefordított erőforrásfájlt a bináris fájllal.

Ezek a lépések nagyjából egyenértékűek a kódfájlok fordítási/csatolási folyamatával. A Visual Studio olyan erőforrás-szerkesztőket biztosít, amelyek megkönnyítik az erőforrások létrehozását és módosítását. (Ezek az eszközök nem érhetők el a Visual Studio Express-kiadásaiban.) Az .rc fájl azonban egyszerűen szöveges fájl, és a szintaxis az MSDN-en van dokumentálva, így bármilyen szövegszerkesztővel létrehozhat .rc fájlt. További információ: Az erőforrásfájlok.

Gyorsítótábla definiálása

A gyorsítótáblák billentyűparancsok táblázatai. Az egyes parancsikonokat a következő határozza meg:

  • Numerikus azonosító. Ez a szám azonosítja a parancsikon által meghívandó alkalmazásparancsot.
  • A parancsikon ASCII-karaktere vagy virtuáliskulcs-kódja.
  • Választható módosítóbillentyűk: ALT, SHIFT vagy CTRL.

Maga a gyorsítótábla numerikus azonosítóval rendelkezik, amely azonosítja a táblát az alkalmazáserőforrások listájában. Hozzunk létre egy gyorsítótáblát egy egyszerű rajzprogramhoz. Ennek a programnak két módja lesz, a rajzolási mód és a kijelölési mód. Rajzolási módban a felhasználó alakzatokat rajzolhat. Kijelölési módban a felhasználó kijelölheti az alakzatokat. Ehhez a programhoz az alábbi billentyűparancsokat szeretnénk meghatározni.

Parancsikon Parancs
CTRL+M Váltás a módok között.
F1 Váltson rajzolási módra.
F2 Váltson kijelölési módra.

 

Először adja meg a tábla és az alkalmazásparancsok numerikus azonosítóit. Ezek az értékek tetszőlegesek. Az azonosítókhoz szimbolikus állandókat rendelhet hozzá, ha egy fejlécfájlban definiálja őket. Például:

#define IDR_ACCEL1                      101
#define ID_TOGGLE_MODE                40002
#define ID_DRAW_MODE                  40003
#define ID_SELECT_MODE                40004

Ebben a példában a IDR_ACCEL1 érték azonosítja a gyorsító táblát, a következő három állandó pedig az alkalmazásparancsokat határozza meg. Konvenció szerint az erőforrás-állandókat meghatározó fejlécfájl neve gyakran resource.h. A következő lista az erőforrásdefiníciós fájlt jeleníti meg.

#include "resource.h"

IDR_ACCEL1 ACCELERATORS
{
    0x4D,   ID_TOGGLE_MODE, VIRTKEY, CONTROL    // ctrl-M
    0x70,   ID_DRAW_MODE, VIRTKEY               // F1
    0x71,   ID_SELECT_MODE, VIRTKEY             // F2
}

A gyorsító billentyűparancsait a kapcsos zárójelek határozzák meg. Minden parancsikon a következő bejegyzéseket tartalmazza.

  • A parancsikont meghívó virtuáliskulcs-kód vagy ASCII-karakter.
  • Az alkalmazásparancs. Figyelje meg, hogy a példa szimbolikus állandókat használ. Az erőforrásdefiníciós fájl tartalmazza a resource.h fájlt, ahol ezek az állandók definiálva vannak.
  • A VIRTKEY kulcsszó azt jelenti, hogy az első bejegyzés egy virtuáliskulcs-kód. A másik lehetőség az ASCII-karakterek használata.
  • Választható módosítók: ALT, CONTROL vagy SHIFT.

Ha ASCII-karaktereket használ a billentyűparancsokhoz, akkor a kisbetűk a nagybetűknél eltérő billentyűparancsok lesznek. (Például az "a" beírása más parancsot hívhat meg, mint az "A" beírása.) Ez összezavarhatja a felhasználókat, ezért általában jobb, ha az ASCII-karakterek helyett virtuáliskulcs-kódokat használ a billentyűparancsokhoz.

A gyorsítótábla betöltése

A gyorsítótábla erőforrását be kell tölteni, mielőtt a program használni tudja. Egy gyorsítótábla betöltéséhez hívja meg a LoadAccelerators függvényt.

    HACCEL hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCEL1));

Az üzenethurok megadása előtt hívja meg ezt a függvényt. Az első paraméter a modul leírója. (Ezt a paramétert a rendszer a WinMain függvénynek továbbítja. További információ: WinMain: The Application Entry Point.) A második paraméter az erőforrás-azonosító. A függvény egy leírót ad vissza az erőforrásnak. Ne feledje, hogy a leíró egy átlátszatlan típus, amely a rendszer által felügyelt objektumra hivatkozik. Ha a függvény sikertelen, NULLad vissza.

A DestroyAcceleratorTablemeghívásával felszabadíthat egy gyorsítótáblát. A rendszer azonban automatikusan felengedi a táblát, amikor a program kilép, ezért csak akkor kell meghívnia ezt a függvényt, ha az egyik táblát lecseréli egy másikra. Erre egy érdekes példa található a Felhasználó által szerkeszthető gyorsítók létrehozásacímű témakörben.

Billentyűvonások fordítása parancsokba

A gyorsítótáblák úgy működnek, hogy kulcsvonásokat fordítanak WM_COMMAND üzenetekbe. A WM_COMMANDwParam paramétere tartalmazza a parancs numerikus azonosítóját. Ha például a korábban bemutatott táblázatot használja, a CTRL+M billentyűkombinációt a rendszer WM_COMMAND üzenetté fordítja le a ID_TOGGLE_MODEértékkel. Ennek érdekében módosítsa az üzenet ciklusát a következőre:

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(win.Window(), hAccel, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

Ez a kód egy hívást ad hozzá a TranslateAccelerator függvényhez az üzenethurkon belül. A TranslateAccelerator függvény megvizsgálja az egyes ablaküzeneteket, és lebillentyűző üzeneteket keres. Ha a felhasználó lenyomja a gyorsítótáblában felsorolt kulcskombinációk egyikét, TranslateAcceleratorWM_COMMAND üzenetet küld az ablaknak. A függvény közvetlenül az ablak eljárásának meghívásával küld WM_COMMAND. Ha TranslateAccelerator sikeresen lefordít egy billentyűvonást, a függvény nem nulla értéket ad vissza, ami azt jelenti, hogy kihagyja az üzenet normál feldolgozását. Ellenkező esetben TranslateAccelerator nulla értéket ad vissza. Ebben az esetben a szokásos módon adja át az ablaküzenetet TranslateMessage és DispatchMessage.

A rajzprogram így kezelheti a WM_COMMAND üzenetet:

    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case ID_DRAW_MODE:
            SetMode(DrawMode);
            break;

        case ID_SELECT_MODE:
            SetMode(SelectMode);
            break;

        case ID_TOGGLE_MODE:
            if (mode == DrawMode)
            {
                SetMode(SelectMode);
            }
            else
            {
                SetMode(DrawMode);
            }
            break;
        }
        return 0;

Ez a kód feltételezi, hogy a SetMode az alkalmazás által a két mód közötti váltáshoz definiált függvény. Az egyes parancsok kezelésének részletei nyilvánvalóan a programtól függenek.

Következő

Kurzor képének beállítása