/* A minimal Windows 98 skeleton. */
/* From the book _Windows 98 Programming from the Ground Up */
/* typed in and untested, so there may be typos -- KFS */

#include <windows.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);

char szWinname[] = "MyWin"; /* name of window class */

int WINAPI WinMain(HINSTNACE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) {
	HWND hwnd;
	MSG msg;
	WNDCLASSEX wcl;

	/* Define a window class. */
	wcl. cbSize = sizeof(WNDCLASSES);

	wcl.hInstance = hThisInst; /* handle to this instance */
	wcl.lpszClassName = szWinName; /* window class name */
	wcl.lpfnWndPrc = 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 */

	/* Make the window background 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 */
		"Windows 98 Skeleton", /* 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) {
	switch(message) {
		case EM_DESTROY: /* terminate the program */
			PostQuitMessage(0);
			break;
		default:
			/* Let Windows 98 process any messages not specified in the preceding
			   message statement. */
			return DefWindowProc(hwnd,message,wParam,lParam);
	}
	return 0;
}
