A complete
pgm using the mouse & KB
// A
demo of keyboard and mouse input, be sure
// to
take a close look at the event handler
// hit
escape to exit, or enter to put up a message box
// move
the mouse around and press the buttons
//
INCLUDES
#define
WIN32_LEAN_AND_MEAN
#include
<windows.h>
#include
<windowsx.h>
#include
<stdio.h>
#include
<math.h>
//
DEFINES
//
defines for windows
#define
WINDOW_CLASS_NAME "WINCLASS1"
//
MACROS
#define
KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define
KEY_UP(vk_code) ((GetAsyncKeyState(vk_code)
& 0x8000) ? 0 : 1)
//
GLOBALS
HWND
main_window_handle = NULL; // save the window handle
//
FUNCTIONS
LRESULT
CALLBACK WindowProc(HWND hwnd,UINT
msg, WPARAM wparam,LPARAM lparam)
{ //
this is the main message handler of the system
PAINTSTRUCT ps; // used in WM_PAINT
HDC hdc; // handle to a device context
// what is the message
switch(msg)
{ case
WM_CREATE:
{ //
do initialization stuff here
return(0);
} break;
case WM_PAINT:
{ //
simply validate the window
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
}
break;
case WM_KEYDOWN: // this message
contains the virtual code
{
// test for the escape key (exit)
if (wparam == VK_ESCAPE)
{
// the user is trying to kill the app, we could post
// a quit message or send a
WM_DESTROY message
// let's do the later
PostMessage(hwnd,
WM_DESTROY,0,0);
} // end if
return(0);
} break;
case WM_CHAR: // this message contains
the ascii code
{
// a key has been pressed
char buffer[80];
sprintf(buffer,"WM_CHAR:
wparam=%c, lparam=%d ",
wparam,lparam);
// print out the key on the screen
hdc = GetDC(hwnd);
// set the colors
SetTextColor(hdc, RGB(0,255,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
// output the message
TextOut(hdc,0,0,buffer,strlen(buffer));
// release dc
ReleaseDC(hwnd,hdc);
return(0);
} break;
case WM_MOUSEMOVE: // whenever the mouse
moves this is sent
{
// extract x,y and buttons
int mouse_x = (int)LOWORD(lparam);
int mouse_y = (int)HIWORD(lparam);
int buttons = (int)wparam;
char buffer[80];
sprintf(buffer,"WM_MOUSEMOVE:
x=%d y=%d buttons=%d ",
mouse_x,mouse_y,buttons);
// print out the key on the screen
hdc = GetDC(hwnd);
// set the colors
SetTextColor(hdc, RGB(255,0,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
// output the message
TextOut(hdc,0,16,buffer,strlen(buffer));
// release dc
ReleaseDC(hwnd,hdc);
return(0);
} break;
case WM_DESTROY:
{
// kill the application
PostQuitMessage(0);
return(0);
} break;
default:break;
} // end switch
// process any messages that we didn't take
care of
return (DefWindowProc(hwnd, msg, wparam,
lparam));
} //
end WinProc
//
******************** WINMAIN ***********************
int
WINAPI WinMain(HINSTANCE hinstance,HINSTANCE
hprevinstance,
LPSTR lpcmdline,
{
WNDCLASS winclass; // this will hold the class we create
HWND
hwnd; // generic window handle
MSG
msg; // generic message
// first fill in the window class stucture
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW |
CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
// register the window class
if (!RegisterClass(&winclass))
return(0);
// create the window
if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME,
// class
"1ST Windows Pgm",
// title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0, // x,y
320,200, // width, height
NULL, // handle to parent
NULL, // handle to menu
hinstance,// instance
NULL))) // creation parms
return(0);
// save the window handle in a global
main_window_handle = hwnd;
// enter main event loop
while(1)
{ if
(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{ //
test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window
proc
DispatchMessage(&msg);
}
// main game processing goes here
// here's a demo of the KEY_DOWN macro
if (KEY_DOWN(VK_RETURN))
MessageBox(NULL, "You Pressed
<ENTER> Didn't You?",
"Asynchronous Keyboard
Test",MB_OK);
}
// return to Windows like this
return(msg.wParam);
} //
end WinMain