scvkjpn1.cpp

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C++ 代码 · 共 643 行 · 第 1/2 页

CPP
643
字号
/* -*-C-*-
 *
 * $Revision: 1.1 $
 *   $Author: kwelton $
 *     $Date: 2000/04/12 03:33:14 $
 *
 * @module scvkjpn11.cpp
 *
 * Sample implementation of the keyboard platform dependent scan code to
 * Virtual Key mapping for keyboard driver.
 *
 * Exports ScanCodeToVKey for the PDD to use to map scan codes to virtual
 * keys.  A version of this will be needed for every physical/virtual key
 * configuration.
 *
 * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
 * ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
 * PARTICULAR PURPOSE.
 *
 * Copyright (c) 1995-1998  Microsoft Corporation
 * Copyright (c) 2000 ARM Limited
 * All Rights Reserved
 */

#include <windows.h>
#include <keybddr.h>

#define ScanCodeTableLast       0x7f
const UINT8  ScanCodeToVKeyTable[ScanCodeTableLast+1] =
{
        0,                              // Scan Code 0x0
        VK_ESCAPE,              // Scan Code 0x1
        '1',                    // Scan Code 0x2
        '2',                    // Scan Code 0x3
        '3',                    // Scan Code 0x4
        '4',                    // Scan Code 0x5
        '5',                    // Scan Code 0x6
        '6',                    // Scan Code 0x7
        '7',                    // Scan Code 0x8
        '8',                    // Scan Code 0x9
        '9',                    // Scan Code 0xA
        '0',                    // Scan Code 0xB
        VK_HYPHEN,              // Scan Code 0xC
        VK_EQUAL,               // Scan Code 0xD
        VK_BACK,                // Scan Code 0xE
        VK_TAB,                 // Scan Code 0xF


        'Q',                    // Scan Code 0x10
        'W',                    // Scan Code 0x11
        'E',                    // Scan Code 0x12
        'R',                    // Scan Code 0x13
        'T',                    // Scan Code 0x14
        'Y',                    // Scan Code 0x15
        'U',                    // Scan Code 0x16
        'I',                    // Scan Code 0x17
        'O',                    // Scan Code 0x18
        'P',                    // Scan Code 0x19
        VK_LBRACKET,    // Scan Code 0x1A
        VK_RBRACKET,    // Scan Code 0x1B
        VK_RETURN,              // Scan Code 0x1C
        VK_LCONTROL,    // Scan Code 0x1D
        'A',                    // Scan Code 0x1E
        'S',                    // Scan Code 0x1F


        'D',                    // Scan Code 0x20
        'F',                    // Scan Code 0x21
        'G',                    // Scan Code 0x22
        'H',                    // Scan Code 0x23
        'J',                    // Scan Code 0x24
        'K',                    // Scan Code 0x25
        'L',                    // Scan Code 0x26
        VK_SEMICOLON,   // Scan Code 0x27
        VK_APOSTROPHE,  // Scan Code 0x28
        VK_BACKQUOTE,   // Scan Code 0x29
        VK_LSHIFT,              // Scan Code 0x2A
        VK_BACKSLASH,   // Scan Code 0x2B
        'Z',                    // Scan Code 0x2C
        'X',                    // Scan Code 0x2D
        'C',                    // Scan Code 0x2E
        'V',                    // Scan Code 0x2F


        'B',                    // Scan Code 0x30
        'N',                    // Scan Code 0x31
        'M',                    // Scan Code 0x32
        VK_COMMA,               // Scan Code 0x33
        VK_PERIOD,              // Scan Code 0x34
        VK_SLASH,               // Scan Code 0x35
        VK_RSHIFT,              // Scan Code 0x36
        VK_MULTIPLY,    // Scan Code 0x37
        VK_LMENU,               // Scan Code 0x38
        VK_SPACE,               // Scan Code 0x39
        VK_CAPITAL,             // Scan Code 0x3A
        VK_F1,                  // Scan Code 0x3B
        VK_F2,                  // Scan Code 0x3C
        VK_F3,                  // Scan Code 0x3D
        VK_F4,                  // Scan Code 0x3E
        VK_F5,                  // Scan Code 0x3F


        VK_F6,                  // Scan Code 0x40
        VK_F7,                  // Scan Code 0x41
        VK_F8,                  // Scan Code 0x42
        VK_F9,                  // Scan Code 0x43
        VK_F10,                 // Scan Code 0x44
        VK_NUMLOCK,             // Scan Code 0x45
        VK_SCROLL,              // Scan Code 0x46
        VK_NUMPAD7,             // Scan Code 0x47
        VK_NUMPAD8,             // Scan Code 0x48
        VK_NUMPAD9,             // Scan Code 0x49
        VK_SUBTRACT,    // Scan Code 0x4A
        VK_NUMPAD4,             // Scan Code 0x4B
        VK_NUMPAD5,             // Scan Code 0x4C
        VK_NUMPAD6,             // Scan Code 0x4D
        VK_ADD,                 // Scan Code 0x4E
        VK_NUMPAD1,             // Scan Code 0x4F


        VK_NUMPAD2,             // Scan Code 0x50
        VK_NUMPAD3,             // Scan Code 0x51
        VK_NUMPAD0,             // Scan Code 0x52
        VK_DECIMAL,             // Scan Code 0x53
        VK_SNAPSHOT,    // Scan Code 0x54
        0,                              // Scan Code 0x55
        0,                              // Scan Code 0x56
        VK_F11,                 // Scan Code 0x57
        VK_F12,                 // Scan Code 0x58
        0,                              // Scan Code 0x59
        0,                              // Scan Code 0x5A
        VK_LWIN,                // Scan Code 0x5B
        VK_RWIN,                // Scan Code 0x5C
        VK_APPS,                // Scan Code 0x5D
        0,                              // Scan Code 0x5E
        0,                              // Scan Code 0x5F

        0,                              // Scan Code 0x60
        0,                              // Scan Code 0x61
        0,                              // Scan Code 0x62
        VK_HELP,                // Scan Code 0x63
        VK_F13,                 // Scan Code 0x64
        VK_F14,                 // Scan Code 0x65
        VK_F15,                 // Scan Code 0x66
        VK_F16,                 // Scan Code 0x67
        VK_F17,                 // Scan Code 0x68
        VK_F18,                 // Scan Code 0x69
        VK_F19,                 // Scan Code 0x6A
        VK_F20,                 // Scan Code 0x6B
        VK_F21,                 // Scan Code 0x6C
        VK_F22,                 // Scan Code 0x6D
        VK_F23,                 // Scan Code 0x6E
        0,                              // Scan Code 0x6F

        0,                              // Scan Code 0x70
        0,                              // Scan Code 0x71
        0,                              // Scan Code 0x72
        0,                              // Scan Code 0x73
        0,                              // Scan Code 0x74
        0,                              // Scan Code 0x75
        VK_F24,                 // Scan Code 0x76
        0,                              // Scan Code 0x77
        0,                              // Scan Code 0x78
        0,                              // Scan Code 0x79
        0,                              // Scan Code 0x7A
        0,                              // Scan Code 0x7B
        0,                              // Scan Code 0x7C
        0,                              // Scan Code 0x7D
        0,                              // Scan Code 0x7E
        0,                              // Scan Code 0x7F



};


#define E0ScanCodeTableFirst    0xe035
#define E0ScanCodeTableLast             0xe05d

const UINT8 ScanCodeE0ToVKeyTable[] =
{
        VK_DIVIDE,              // Scan Code 0xE035
        0,                              // Scan Code 0xE036
        VK_SNAPSHOT,    // Scan Code 0xE037
        VK_RMENU,               // Scan Code 0xE038
        0,                              // Scan Code 0xE039
        0,                              // Scan Code 0xE03A
        0,                              // Scan Code 0xE03B
        0,                              // Scan Code 0xE03C
        0,                              // Scan Code 0xE03D
        0,                              // Scan Code 0xE03E
        0,                              // Scan Code 0xE03F
        0,                              // Scan Code 0xE040
        0,                              // Scan Code 0xE041
        0,                              // Scan Code 0xE042
        0,                              // Scan Code 0xE043
        0,                              // Scan Code 0xE044
        0,                              // Scan Code 0xE045
        0,                              // Scan Code 0xE046
        VK_HOME,                // Scan Code 0xE047
        VK_UP,                  // Scan Code 0xE048
        VK_PRIOR,               // Scan Code 0xE049
        0,                              // Scan Code 0xE04A
        VK_LEFT,                // Scan Code 0xE04B
        0,                              // Scan Code 0xE04C
        VK_RIGHT,               // Scan Code 0xE04D
        0,                              // Scan Code 0xE04E
        VK_END,                 // Scan Code 0xE04F
        VK_DOWN,                // Scan Code 0xE050
        VK_NEXT,                // Scan Code 0xE051
        VK_INSERT,              // Scan Code 0xE052
        VK_DELETE,              // Scan Code 0xE053
        0,                              // Scan Code 0xE054
        0,                              // Scan Code 0xE055
        0,                              // Scan Code 0xE056
        0,                              // Scan Code 0xE057
        0,                              // Scan Code 0xE058
        0,                              // Scan Code 0xE059
        0,                              // Scan Code 0xE05A
        VK_LWIN,                // Scan Code 0xE05B
        VK_RWIN,                // Scan Code 0xE05C
        VK_APPS,                // Scan Code 0xE05D
};


/*++

ScanCodeToVKeyEx:

Map a scan code to virtual key(s).

--*/
UINT32
ScanCodeToVKeyEx(
        UINT32                  ScanCode,
        KEY_STATE_FLAGS KeyStateFlags,
        UINT32                  VKeyBuf[16],
        UINT32                  ScanCodeBuf[16],
        KEY_STATE_FLAGS KeyStateFlagsBuf[16]
        )
{
        int     cVKeys = 0;

        if ( ScanCode == 0x45 )
                {
                //      The desktop shows that this is an extended
                //      scan code.  To make it look the same, we
                //      pass back the scan code with a e0 tacked
                //      on to it.
                VKeyBuf[cVKeys] = VK_NUMLOCK;
                ScanCodeBuf[cVKeys] = 0xe045;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                }
        else if ( ScanCode == 0xe01c )
                {
                VKeyBuf[cVKeys] = VK_RETURN;
                ScanCodeBuf[cVKeys] = ScanCode;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                }
        else if ( ScanCode == 0xe01d )
                {
                VKeyBuf[cVKeys] = VK_RCONTROL;
                ScanCodeBuf[cVKeys] = ScanCode;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                }
#if USE_ALT_GR
        //      Turn this on if you need AltGr on a keyboard.
        else if ( ScanCode == 0xe038 )
                {
                VKeyBuf[cVKeys] = VK_RMENU;
                ScanCodeBuf[cVKeys] = ScanCode;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                VKeyBuf[cVKeys] = VK_RCONTROL;
                ScanCodeBuf[cVKeys] = ScanCode;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                }
#endif
        else if ( ScanCode == 0xe11d45 )
                {
                VKeyBuf[cVKeys] = VK_PAUSE;
                ScanCodeBuf[cVKeys] = 0x45;
                KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                cVKeys++;
                }
        else if ( ( ScanCode >= E0ScanCodeTableFirst ) &&
                          ( ScanCode <= E0ScanCodeTableLast ) )
                {
                VKeyBuf[cVKeys] = ScanCodeE0ToVKeyTable[ScanCode - E0ScanCodeTableFirst];
                if ( VKeyBuf[cVKeys] )
                        {
                        ScanCodeBuf[cVKeys] = ScanCode;
                        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                        cVKeys++;
                        }
                }
        else if ( ScanCode <= ScanCodeTableLast )
                {
                VKeyBuf[cVKeys] = ScanCodeToVKeyTable[ScanCode];
                if ( VKeyBuf[cVKeys] )
                        {
                        ScanCodeBuf[cVKeys] = ScanCode;
                        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
                        cVKeys++;
                        }
                }

        //      For some reason, the print screen key has an extra 0xe02a scan code
        //      in it.  It doesn't do anything so we won't complain about it.
        if ( ( cVKeys == 0 ) &&
                 ( ScanCode != 0xe02a ) )
                {
                RETAILMSG(1,(TEXT("Unknown scan code %x\r\n"), ScanCode));
                }

        return cVKeys;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?