This example uses the CHARMSG macro to process a WM_CHAR message. It first uses the macro to determine if a key was released. It then uses the macro to generate a switch statement based on the character received.
MRESULT CALLBACK GenericWndProc(hwnd, usMessage, mp1, mp2)
HWND hwnd;
USHORT usMessage;
MPARAM mp1;
MPARAM mp2;
{
switch (usMessage) {
case WM_CHAR:
if (CHARMSG(&usMessage)->fs & KC_KEYUP) {
switch (CHARMSG(&usMessage)->chr) {