keycode.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:7k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * keycode.h
  3.  *
  4.  * Windows keyboard input code.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: keycode.h,v $
  30.  * Revision 1.15  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.14  1999/03/09 08:01:48  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.13  1999/02/16 08:08:45  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.12  1998/09/23 06:24:03  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.11  1995/11/20 11:03:10  robertj
  43.  * Fixed compatibility the resource compiler and editor.
  44.  *
  45.  * Revision 1.10  1995/03/14 12:41:39  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.9  1994/12/15  12:47:15  robertj
  49.  * Documentation.
  50.  *
  51.  * Revision 1.8  1994/08/23  11:32:52  robertj
  52.  * Oops
  53.  *
  54.  * Revision 1.7  1994/08/22  00:46:48  robertj
  55.  * Added pragma fro GNU C++ compiler.
  56.  *
  57.  * Revision 1.6  1994/06/25  11:55:15  robertj
  58.  * Unix version synchronisation.
  59.  *
  60.  * Revision 1.5  1994/03/07  07:38:19  robertj
  61.  * Major enhancementsacross the board.
  62.  *
  63.  * Revision 1.4  1994/01/03  04:42:23  robertj
  64.  * Mass changes to common container classes and interactors etc etc etc.
  65.  *
  66.  * Revision 1.3  1993/12/16  03:30:24  robertj
  67.  * Removed usage of enum as bitmask, GCC doesn't like it.
  68.  *
  69.  * Revision 1.2  1993/07/14  12:49:16  robertj
  70.  * Fixed RCS keywords.
  71.  *
  72.  */
  73. #ifdef __GNUC__
  74. #pragma interface
  75. #endif
  76. /**A class representing a key from the keyboard. This virtualises the key into
  77.    a platform independent form that removes as far as possible the variations
  78.    in keyboards and layouts.
  79.    Note that not all key values and modifiers may be generated by all target
  80.    platforms.
  81.  */
  82. class PKeyCode : public PObject
  83. {
  84.   PCLASSINFO(PKeyCode, PObject);
  85.   public:
  86.    /**All possible keyboard values (codes representing each key on a
  87.        "normalised" keyboard).
  88.      */
  89.     enum Value {
  90.       NullValue,    // No value
  91.       LeftButton,   // Left mouse button
  92.       RightButton,  // Right mouse button
  93.       MiddleButton, // Middle mouse button
  94.       A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
  95.         // Standard keyboard keys for alphabetic characters.
  96.       KB0, KB1, KB2, KB3, KB4, KB5, KB6, KB7, KB8, KB9,
  97.         // Standard number keys in main part of the keyboard.
  98.       KP0, KP1, KP2, KP3, KP4, KP5, KP6, KP7, KP8, KP9,
  99.         // Keypad number keys.
  100.       Add,       // Add key on the keypad.
  101.       Subtract,  // Subtract key on the keypad.
  102.       Multiply,  // Multiply key on the keypad.
  103.       Divide,    // Divide key on the keypad.
  104.       Separator, // Separator key on the keypad, typically a comma.
  105.       Decimal,   // Decimal point key on the keypad, typically a dot.
  106.       F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,
  107.       F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
  108.         // Function keys.
  109.       Up, Down, Left, Right,        // Arrow keys.
  110.       PageUp, PageDown, Home, End,  // Standard movement keys.
  111.       Insert, Delete, Undo, Cut, Copy, Paste, Clear, Cancel, Help, Quit,
  112.         // Special function keys.
  113.       BackSpace, Tab, Return, Escape, Space,
  114.         // Miscellaneous keys.
  115.       CapsLockKey, ShiftKey, ControlKey, Altkey,
  116.       CommandKey, OptionKey, MetaKey,
  117.         // Modifier keys.
  118.       Oem1,  Oem2,  Oem3,  Oem4,  Oem5,  Oem6,  Oem7,  Oem8,  Oem9,  Oem10,
  119.       Oem11, Oem12, Oem13, Oem14, Oem15, Oem16, Oem17, Oem18, Oem19, Oem20,
  120.       Oem21, Oem22, Oem23, Oem24, Oem25, Oem26, Oem27, Oem28, Oem29, Oem30,
  121.       Oem31, Oem32, Oem33, Oem34, Oem35, Oem36, Oem37, Oem38, Oem39,
  122.         // Arbitrary keys, not normalised.
  123.       LastCode
  124.     };
  125.    /**All the possible modifiers to the key values specified above. The
  126.        modifiers Accelerator1 and Accelerator2 are normalised menu bar
  127.        accelerators for the different platforms, e.g. for the Macintosh
  128.        Accelerator1 if the Command key, which does not exist on the IBM-PC so
  129.        it has Accelerator1 set to Control. An application can thus use
  130.        Accelerator1 for its menu accelerator code and get the "correct" code
  131.        for the platform used.
  132.      */
  133.     enum Modifiers {
  134.       /// No modifers present.
  135.       NoModifier =        0x0000,   
  136.       /// Either shift key.
  137.       Shift =             0x0001,   
  138.       /// The control key.
  139.       Control =           0x0002,   
  140.       /// The Alt or Extend key.
  141.       Alt =               0x0004,   
  142.       /// The quadraphogly key on the Macintosh.
  143.       Command =           0x0008,   
  144.       /// The option key on the Macintosh.
  145.       Option =            0x0010,   
  146.       /// The CAPS LOCK key.
  147.       CapsLock =          0x0020,   
  148.       /// The primary accelerator key.
  149.       Accelerator1 =      0x0040,   
  150.       /// The secondary accelerator key.
  151.       Accelerator2 =      0x0080,   
  152.       /// The left mouse button.
  153.       LeftMouseButton =   0x1000,   
  154.       /// The right mouse button.
  155.       RightMouseButton =  0x2000,   
  156.       /// The middle mouse button.
  157.       MiddleMouseButton = 0x4000    
  158.     };
  159.     /** Create a new key code representation. */
  160.     PKeyCode(
  161.       Value theValue = NullValue,   /// Value of key code.
  162.       int theMods = NoModifier      /// Modifiers present for key code.
  163.     );
  164.   /**@name Overrides from class PObject */
  165.     /** Create a copy of the key code. */
  166.     virtual PObject * Clone() const;
  167.    /**Determine the relative rank of the key codes.
  168.        @return
  169.        #EqualTo# if the key value and modifiers are the same,
  170.        #LessThan# if the key codes are the same but the modifier is
  171.        different and #GreaterThan# if they are both different.
  172.      */
  173.     virtual Comparison Compare(
  174.       const PObject & obj   /// Other key code to compare against.
  175.     ) const;
  176.    /**Get the value part of the key code.
  177.        @return
  178.        value of key code.
  179.      */
  180.     Value GetValue() const;
  181.    /**Get the modifiers part of the key code.
  182.        @return
  183.        modifiers of key code.
  184.      */
  185.     int GetModifiers() const;
  186.    /**Determine if any of the the specified modifier(s) are set. This would
  187.        usually be used with a single modifier, but is not limited to it.
  188.        @return
  189.        TRUE if any of the modifiers in the #modmask# are set.
  190.      */
  191.     BOOL IsModifier(
  192.       int modmask   /// Mask of modifiers to check for.
  193.     ) const;
  194.   protected:
  195.     Value value;
  196.     int modifiers;
  197. #ifdef DOC_PLUS_PLUS
  198. };
  199. #endif
  200. // Class declaration continued in platform specific header file ///////////////