Applications decode WM_CHAR messages by examining individual bits in the flag word contained in the first message parameter (mp1) that the system passes with every WM_CHAR message. The type of flag word indicates the nature of the message. The system can set the bits in the flag word in various combinations. For example, a WM_CHAR message can have the KC_CHAR, KC_SCANCODE, and KC_SHIFT attribute bits all set at the same time. An application can use the following list of flag values to test the flag word and determine the nature of a WM_CHAR message:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³Flag Name      ³Description                                  ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_ALT         ³Indicates that the Alt key was down when the ³
³               ³message was generated.                       ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_CHAR        ³Indicates that the message contains a valid  ³
³               ³character code for a key, typically an ASCII ³
³               ³character code.                              ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_COMPOSITE   ³In combination with the KC_CHAR flag, this   ³
³               ³flag indicates that the character code is a  ³
³               ³combination of the key that was pressed and  ³
³               ³the previous dead key.  This flag is used to ³
³               ³create characters with diacritical marks.    ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_CTRL        ³Indicates that the Ctrl key was down when the³
³               ³message was generated.                       ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_DEADKEY     ³In combination with the KC_CHAR flag, this   ³
³               ³flag indicates that the character code       ³
³               ³represents a dead-key glyph (such as an      ³
³               ³accent).  An application displays the        ³
³               ³dead-key glyph and does not advance the      ³
³               ³cursor.  Typically, the next WM_CHAR message ³
³               ³is a KC_COMPOSITE message, containing the    ³
³               ³glyph associated with the dead key.          ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_INVALIDCHAR ³Indicates that the character is not valid for³
³               ³the current translation tables.              ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_INVALIDCOMP ³Indicates that the character code is not     ³
³               ³valid in combination with the previous dead  ³
³               ³key.                                         ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_KEYUP       ³Indicates that the message was generated when³
³               ³the user released the key. If this flag is   ³
³               ³clear, the message was generated when the    ³
³               ³user pressed the key.  An application can use³
³               ³this flag to determine key-down and key-up   ³
³               ³events.                                      ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_LONEKEY     ³In combination with the KC_KEYUP flag, this  ³
³               ³flag indicates that the user pressed no other³
³               ³key while this key was down.                 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_PREVDOWN    ³In combination with the KC_VIRTUALKEY flag,  ³
³               ³this flag indicates that the virtual key was ³
³               ³pressed previously. If this flag is clear,   ³
³               ³the virtual key was not previously pressed.  ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_SCANCODE    ³Indicates that the message contains a valid  ³
³               ³scan code generated by the keyboard when the ³
³               ³user pressed the key. The system uses the    ³
³               ³scan code to identify the character code in  ³
³               ³the current code page; therefore, most       ³
³               ³applications do not need the scan code unless³
³               ³they cannot identify the key that the user   ³
³               ³pressed. WM_CHAR messages generated by user  ³
³               ³keyboard input generally have a valid scan   ³
³               ³code, but WM_CHAR messages posted to the     ³
³               ³queue by other applications might not contain³
³               ³a scan code.                                 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_SHIFT       ³Indicates that the Shift key was down when   ³
³               ³the message was generated.                   ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_TOGGLE      ³Toggles on and off every time the user       ³
³               ³presses a specified key. This is important   ³
³               ³for keys like NumLock, which have an on or   ³
³               ³off state.                                   ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³KC_VIRTUALKEY  ³Indicates that the message contains a valid  ³
³               ³virtual-key code for a key. Virtual keys     ³
³               ³typically correspond to function keys.       ³
³               ³For those using hooks, when this bit is set, ³
³               ³KC_SCANCODE should usually be set as well.   ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

The mp1 and mp2 parameters of the WM_CHAR message contain information describing the nature of a keyboard input event, as follows:

An application window procedure should return TRUE if it processes a particular WM_CHAR message or FALSE if it does not. Typically, applications respond to key-down events and ignore key-up events.

The following sections describe the different types of WM_CHAR messages. Generally, an application decodes these messages by creating layers of conditional statements that discriminate among the different combinations of flag and code attributes that can occur in a keyboard message.


[Back] [Next]