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.