Code:
/* Process Mouse Messages. */
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "Clock.h"
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
char szWinName[] = "MyWin"; /* name of window class */
char str[255] = ""; /* holds output string */
MMRESULT begin = timeBeginPeriod(1);
MMRESULT end = timeEndPeriod(2);
DWORD start=timeGetTime();
LONG xI=0;
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
/* Define a window class. */
wcl.cbSize = sizeof(WNDCLASSEX);
wcl.hInstance = hThisInst; /* handle to this instance */
wcl.lpszClassName = szWinName; /* window class name */
wcl.lpfnWndProc = WindowFunc; /* window function */
wcl.style = 0; /* default style */
wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* standard icon */
wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); /* small icon */
wcl.hCursor = LoadCursor(NULL, IDC_ARROW); /* cursor style */
wcl.lpszMenuName = NULL; /* no main menu */
wcl.cbClsExtra = 0; /* no extra */
wcl.cbWndExtra = 0; /* information needed */
/* Make the window white. */
wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
/* Register the window class. */
if(!RegisterClassEx(&wcl)) return 0;
/* Now that a window class has been registered, a window
can be created. */
hwnd = CreateWindow(
szWinName, /* name of window class */
"Processing Mouse Messages", /* title */
WS_OVERLAPPEDWINDOW, /* window style - normal */
CW_USEDEFAULT, /* X coordinate - let Windows decide */
CW_USEDEFAULT, /* Y coordinate - let Windows decide */
CW_USEDEFAULT, /* width - let Windows decide */
CW_USEDEFAULT, /* height - let Windows decide */
HWND_DESKTOP, /* no parent window */
NULL, /* no menu */
hThisInst, /* handle of this instance of the program */
NULL /* no additional arguments */
);
/* Display the window. */
ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd);
/* Create the message loop. */
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); /* translate keyboard messages */
DispatchMessage(&msg); /* return control to Windows 98 */
}
return msg.wParam;
}
/* This function is called by Windows 98 and is passed
messages from the message queue.
*/
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
Clock timer;
switch(message) {
case WM_RBUTTONDOWN: /* process right button */
hdc = GetDC(hwnd); /* get DC */
sprintf(str, "Right button is down at %d, %d",
LOWORD(lParam), HIWORD(lParam));
TextOut(hdc, LOWORD(lParam), HIWORD(lParam),
str, strlen(str));
ReleaseDC(hwnd, hdc); /* Release DC */
break;
case WM_LBUTTONDOWN: /* process left button */
hdc = GetDC(hwnd); /* get DC */
TextOut(hdc, 10, 50, "Angular velocity is ", 54);
sprintf(str, "Time passed is %d pixels/sec", timeGetTime()-start);
TextOut(hdc, 10, 50, str, strlen(str));
ReleaseDC(hwnd, hdc); /* Release DC */
break;
case WM_MOUSEMOVE:
hdc = GetDC(hwnd);
TextOut(hdc, 10, 50, " ", 49);
sprintf(str, "Time passed is %d milliseconds", timeGetTime()-start);
TextOut(hdc, 10, 50, str, strlen(str));
TextOut(hdc, 10, 10, "Mouse coordinates are at ", 59);
sprintf(str, "Mouse coordinates are at (%d, %d)", LOWORD(lParam), HIWORD(lParam));
TextOut(hdc, 10, 10, str, strlen(str));
ReleaseDC(hwnd,hdc);
break;
case WM_DESTROY: /* terminate the program */
PostQuitMessage(0);
break;
default:
/* Let Windows 98 process any messages not specified in
the preceding switch statement. */
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
/* Clock class definition (FYI)
class Clock
{
private:
float timestarted;
public:
Clock();
VOID reset();
VOID wait(const float &tsec);
float time();
};
VOID Clock::reset()
{
timestarted=timeGetTime();
return;
}
float Clock::time()
{
return timeGetTime()-timestarted;
}
VOID wait(const float &tsec)
{
DWORD beginning = timeGetTime();
while(beginning + tsec*1000 > timeGetTime())
{ /* wait */}
return;
} */